RT. 我在本机和赛场上代码均编译成功。洛谷评测时变量名重名。 我不会这题爆零吧。。。
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1000010];
bool first=1;
set<pair<int,int> >s;
int per[1000010],kill[1000010];
int alive[1000010];
void work(){
memset(alive,0,sizeof(alive));
memset(per,0,sizeof(per));
memset(kill,0,sizeof(kill));
s.clear();
if(first){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",a+i);
}
first=0;
}else{
int k;
scanf("%d",&k);
for(int i=1;i<=k;i++){
int x,y;
scanf("%d%d",&x,&y);
a[x]=y;
}
}
for(int i=1;i<=n;i++){
s.insert(make_pair(a[i],i));
}
int i=1;
while(s.size()>1){
set<pair<int,int> >::iterator it=s.end();
it--;
int x=(*s.begin()).second,xv=(*s.begin()).first,y=(*it).second,yv=(*it).first;
s.erase(s.begin());
s.erase(it);
per[i]=y;
kill[i]=x;
alive[x]=i;
s.insert(make_pair(yv-xv,y));
i++;
}
for(int i=n-1;i>=1;i--){
if(alive[per[i]]!=0){
for(int j=i;j<n;j++)alive[kill[j]]=0;
}
}
//for(int i=1;i<=n-1;i++)printf("%d\n",kill[i]);
int ans=0;
for(int i=1;i<=n;i++)if(alive[i]==0)ans++;
printf("%d\n",ans);
}
int main(){
freopen("snakes.in","r",stdin);
freopen("snakes.out","w",stdout);
int T;
scanf("%d",&T);
while(T--)work();
return 0;
}