Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.*;
- public class Main {
- public static void main(String[] args) {
- InputStream inputStream = System.in;
- OutputStream outputStream = System.out;
- InputReader in = new InputReader(inputStream);
- PrintWriter out = new PrintWriter(outputStream);
- Solver solver = new Solver();
- solver.solve(in, out);
- out.close();
- }
- static class Solver {
- public void solve(InputReader in, PrintWriter out) {
- int n = in.nextInt();
- int m = in.nextInt();
- int[] a = new int[n];
- Set<Integer> set = new HashSet<>();
- HashMap<Integer, Integer> map = new HashMap<>();
- for (int i = 0; i < n; ++i) {
- a[i] = in.nextInt();
- set.add(a[i]);
- if (!map.containsKey(a[i])) {
- map.put(a[i], 1);
- } else {
- map.put(a[i], map.get(a[i]) + 1);
- }
- }
- int max_diff = (int)Math.ceil(Math.pow(2, (m * 8) / n));
- if (max_diff >= set.size()) {
- out.println(0);
- return;
- }
- Map<Integer, Integer> hm = sortByValue(map);
- int min = (int)1e9 + 1;
- int max = 0;
- int cur = 0, tot = 0;
- for (Map.Entry<Integer, Integer> en : hm.entrySet()) {
- ++cur;
- if (set.size() - cur < max_diff) {
- min = Math.min(min, en.getKey());
- max = Math.max(max, en.getKey());
- }
- }
- cur = 0;
- for (Map.Entry<Integer, Integer> en : hm.entrySet()) {
- ++cur;
- tot += en.getValue();
- if (set.size() - cur >= max_diff) {
- if (en.getKey() >= min && en.getKey() <= max) {
- tot -= en.getValue();
- }
- }
- if (set.size() - cur == max_diff) {
- out.println(tot);
- return;
- }
- }
- }
- public static HashMap<Integer, Integer> sortByValue(HashMap<Integer, Integer> hm) {
- List<Map.Entry<Integer, Integer>> list = new LinkedList<Map.Entry<Integer, Integer>>(hm.entrySet());
- Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
- public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
- return (o1.getValue()).compareTo(o2.getValue());
- }
- });
- HashMap<Integer, Integer> temp = new LinkedHashMap<Integer, Integer>();
- for (Map.Entry<Integer, Integer> aa : list) {
- temp.put(aa.getKey(), aa.getValue());
- }
- return temp;
- }
- }
- static class InputReader {
- public BufferedReader reader;
- public StringTokenizer tokenizer;
- public InputReader(InputStream stream) {
- reader = new BufferedReader(new InputStreamReader(stream), 32768);
- tokenizer = null;
- }
- public String next() {
- while (tokenizer == null || !tokenizer.hasMoreElements()) {
- try {
- tokenizer = new StringTokenizer(reader.readLine());
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- return tokenizer.nextToken();
- }
- public String nextLine() {
- String s = "";
- try {
- s = reader.readLine();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- return s;
- }
- public int nextInt() {
- return Integer.parseInt(next());
- }
- public long nextLong() {
- return Long.parseLong(next());
- }
- public double nextDouble() {
- return Double.parseDouble(next());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement