Advertisement
islomiddin

Untitled

Jul 30th, 2019
504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.07 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3. public class Main {
  4.     public static void main(String[] args) {
  5.         InputStream inputStream = System.in;
  6.         OutputStream outputStream = System.out;
  7.         InputReader in = new InputReader(inputStream);
  8.         PrintWriter out = new PrintWriter(outputStream);
  9.         Solver solver = new Solver();
  10.         solver.solve(in, out);
  11.         out.close();
  12.     }
  13.     static class Solver {
  14.         public void solve(InputReader in, PrintWriter out) {
  15.             int n = in.nextInt();
  16.             int m = in.nextInt();
  17.             int[] a = new int[n];
  18.             Set<Integer> set = new HashSet<>();
  19.             HashMap<Integer, Integer> map = new HashMap<>();
  20.             for (int i = 0; i < n; ++i) {
  21.                 a[i] = in.nextInt();
  22.                 set.add(a[i]);
  23.                 if (!map.containsKey(a[i])) {
  24.                     map.put(a[i], 1);
  25.                 } else {
  26.                     map.put(a[i], map.get(a[i]) + 1);
  27.                 }
  28.             }
  29.             int  max_diff = (int)Math.ceil(Math.pow(2, (m * 8) / n));
  30.             if (max_diff >= set.size()) {
  31.                 out.println(0);
  32.                 return;
  33.             }
  34.             Map<Integer, Integer> hm = sortByValue(map);
  35.             int min = (int)1e9 + 1;
  36.             int max = 0;
  37.             int cur = 0, tot = 0;
  38.             for (Map.Entry<Integer, Integer> en : hm.entrySet()) {
  39.                 ++cur;
  40.                 if (set.size() - cur < max_diff) {
  41.                     min = Math.min(min, en.getKey());
  42.                     max = Math.max(max, en.getKey());
  43.                 }
  44.             }
  45.             cur = 0;
  46.             for (Map.Entry<Integer, Integer> en : hm.entrySet()) {
  47.                 ++cur;
  48.                 tot += en.getValue();
  49.                 if (set.size() - cur >= max_diff) {
  50.                     if (en.getKey() >= min && en.getKey() <= max) {
  51.                         tot -= en.getValue();
  52.                     }
  53.                 }
  54.                 if (set.size() - cur == max_diff) {
  55.                     out.println(tot);
  56.                     return;
  57.                 }
  58.             }
  59.  
  60.         }
  61.         public static HashMap<Integer, Integer> sortByValue(HashMap<Integer, Integer> hm) {
  62.             List<Map.Entry<Integer, Integer>> list = new LinkedList<Map.Entry<Integer, Integer>>(hm.entrySet());
  63.             Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
  64.                 public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
  65.                     return (o1.getValue()).compareTo(o2.getValue());
  66.                 }
  67.             });
  68.             HashMap<Integer, Integer> temp = new LinkedHashMap<Integer, Integer>();
  69.             for (Map.Entry<Integer, Integer> aa : list) {
  70.                 temp.put(aa.getKey(), aa.getValue());
  71.             }
  72.             return temp;
  73.         }
  74.     }
  75.     static class InputReader {
  76.         public BufferedReader reader;
  77.         public StringTokenizer tokenizer;
  78.         public InputReader(InputStream stream) {
  79.             reader = new BufferedReader(new InputStreamReader(stream), 32768);
  80.             tokenizer = null;
  81.         }
  82.         public String next() {
  83.             while (tokenizer == null || !tokenizer.hasMoreElements()) {
  84.                 try {
  85.                     tokenizer = new StringTokenizer(reader.readLine());
  86.                 } catch (IOException e) {
  87.                     throw new RuntimeException(e);
  88.                 }
  89.             }
  90.             return tokenizer.nextToken();
  91.         }
  92.         public String nextLine() {
  93.             String s = "";
  94.             try {
  95.                 s = reader.readLine();
  96.             } catch (IOException e) {
  97.                 throw new RuntimeException(e);
  98.             }
  99.             return s;
  100.         }
  101.         public int nextInt() {
  102.             return Integer.parseInt(next());
  103.         }
  104.         public long nextLong() {
  105.             return Long.parseLong(next());
  106.         }
  107.         public double nextDouble() {
  108.             return Double.parseDouble(next());
  109.         }
  110.     }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement