fork download
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. int main()
  5. {
  6. ll int t,n,m=0,i,ans,ar[400005];
  7. scanf("%lld%lld",&n,&i);
  8. map<ll int,ll int>mp;
  9. list<ll int>li;
  10.  
  11. for(int p=0; p<n; p++)
  12. {
  13. scanf("%lld",&ar[p]);
  14. mp[ar[p]]++;
  15. }
  16. ll int K=mp.size();
  17. double f=log2(K);
  18. ll int k=f;
  19. double hh=k;
  20.  
  21. if(f>hh)
  22. k++;
  23. ans=n*k;
  24. i=i*8;
  25. if(ans<=i)
  26. {
  27. printf("%lld\n",m);return 0;
  28. }
  29.  
  30. for(auto it=mp.begin(); it!=mp.end(); it++)
  31. {
  32.  
  33. ll int j=(*it).second;
  34. li.push_back(j);
  35. }
  36. while(!li.empty())
  37. {
  38.  
  39.  
  40. ll int a=li.front();
  41. ll int b=li.back();
  42. if(a<b)
  43. {
  44. li.pop_front();
  45. m+=a;
  46. }
  47. else
  48. {
  49. li.pop_back();
  50. m+=b;
  51. }
  52. K--;
  53. double f=log2(K);
  54. k=f;
  55. hh=k;
  56. if(f>hh)
  57. k++;
  58.  
  59. ans=n*k;
  60. if(ans<=i)
  61. break;
  62. }
  63. printf("%lld\n",m);
  64. }
  65.  
Success #stdin #stdout 0s 4176KB
stdin
6 1
1 2 3 4 1 1

stdout
2