题目链接
总感觉这时间复杂度有问题。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+50;
int cnt[maxn];
bool cmp(int x, int y)
{
return x > y;
}
int main ()
{
ios_base::sync_with_stdio(false);
int q;
cin>>q;
while(q--)
{
int n;
cin>>n;
for(int i = 0;i <= n;i++)cnt[i] = 0;
for(int i = 0;i < n;i++)
{
int num;
cin>>num;
cnt[num]++;
}
sort(cnt+1, cnt+n+1, cmp);
long long sum = cnt[1];
int l = cnt[1];
for(int i = 2;i <= n;i++)
{
if(l == 1||cnt[i] == 0)break;
if(cnt[i] < l)
{
sum +=cnt[i];
l = cnt[i];
}
else
{
sum += l-1;
l--;
}
}
cout<<sum<<endl;
}
return 0;
}