我的做法
#include<stdio.h>
using namespace std;
int nations[100003],xit[300005],xi[300005];
int main(){
int n,t,k,x,kc=0,xc=0,nc=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&t,&k);
while(xit[kc]<=t-86400){
nations[xi[kc]]--;
if(!nations[xi[kc++]]) nc--;
}
for(int j=0;j<k;j++){
scanf("%d",&x);
xit[++xc]=t;
xi[xc]=x;
if(!nations[x]) nc++;
nations[x]++;
}
printf("%d\n",nc);
}
}
大佬的做法
#include<iostream>
using namespace std;
int s,i,n,t,k,r,w[100001],x[300002],y[300002];
main(){
cin>>n;
while(n--){
cin>>t>>k;
while(k--){
y[++r]=t;cin>>x[r];
if(!w[x[r]])s++;
w[x[r]]++;
}
while(t-y[i]>=86400)
if(!--w[x[i++]])s--;
cout<<s<<endl;
}
}
经检测是因为两个子循环顺序不同导致的部分测试集re报错。但本人较困惑为何会出现这样的情况。