萌新昨天F题用unordered_map赛后被叉(TLE)了,但把unordered_map改成map它就能非常顺利地通过,这是为什么呢?
#include<bits/stdc++.h>
#define N 300006
using namespace std;
int n,m,a[N],tr[N];
unordered_map<int,int>mp,book;
inline int qr()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
void add(int x,int q)
{
while(x<=n){
tr[x]+=q;
x+=x&-x;
}
}
int query(int x)
{
int tot=0;
while(x){
tot+=tr[x];
x-=x&-x;
}
return tot;
}
int main()
{
srand(time(0));
int T=qr();
for(int op=1;op<=T;op++){
n=qr();
for(int i=0;i<=n;i++)tr[i]=0;
for(int i=1;i<=n;i++)mp[a[i]=qr()]++;
for(int i=1;i<=n;i++)
if(!book[a[i]]){
add(mp[a[i]]+1,-1);
add(1,1);
book[a[i]]=1;
}
int ans=n;
for(int i=1;i<=n;i++){
int cnt=query(i),num=cnt*i;
ans=min(ans,n-num);
}
mp.clear();
book.clear();
printf("%d\n",ans);
}
}
这是用unordered_map的代码,改成map就过了。淦