unordered_map会超时?
#include <iostream> #include <cstring> #include <vector> #include <algorithm> #include <cmath> #include <map> using namespace std; const int N=2e5+10; typedef long long LL; LL a[N],s2[N],s1[N],v[N]; map<int,int>memo; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t;cin>>t; int n; while(t--) { memo.clear(); cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; memo[a[i]]++; v[i]=0; } int cnt=0; for(auto x=memo.begin();x!=memo.end();x++) { cnt=max(cnt,x->second); v[x->second]++; } // LL ans=2e9; for(int i=1;i<=cnt;i++) { s1[i]=s1[i-1]+v[i]*i; s2[i]=s2[i-1]+v[i]; }//全删 for(int i=1;i<=cnt;i++) { LL sum=s1[i-1]//小于i次全删 +s1[cnt]-s1[i+1-1]-i*(s2[cnt]-s2[i+1-1]);//大于i次删到 i次 总和减去 后面都变成i次 就是操作数 ans=min(ans,sum); } cout<<ans<<endl; } return 0; }