ulvis.paste.net

Paste Search Dynamic
Recent pastes
min/max
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <map>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. const int maxn = 200000;
  10.  
  11. map<int, int> M;
  12. int A[maxn], n, cnt, res, m;
  13. vector<int> F;
  14.  
  15. int main()
  16. {
  17.     cin >> n;
  18.     for (int i = 0; i < n; ++i)
  19.         cin >> A[i], M[A[i]]++, cnt += (M[A[i]] == 1);
  20.  
  21.     for (auto p : M)
  22.         F.push_back(p.second);
  23.  
  24.     sort(F.begin(), F.end());
  25.     for (int i = cnt - 1, a = 1; i >= 0 && a <= F[cnt - 1]; --i, a <<= 1)
  26.     {
  27.         m += a;
  28.         int tmp = a, k = F[i], s = 0;
  29.         for (int j = cnt - 1; j >= i; --j)
  30.             k = min(k, F[j] / tmp), tmp >>= 1;
  31.  
  32.         if (k)
  33.             res = max(res, k * m);
  34.         else
  35.             break;
  36.     }
  37.  
  38.     cout << res << '\n';
  39. }
Parsed in 0.008 seconds