题解
因为要统计近24小时之间的数据,我们没有办法对当前的数据操作从而达到统计未来24h之内的国籍,但是我们可以通过队列暂时存储该数据,等到24h后再处理当前的数据。也即,队列中一直存储近24h的数据,我们用这个队列“筛子”去从前往后筛不同的24h从而得到每24h的结果。
AC代码
#include<bits/stdc++.h>
using namespace std;
int flag[100010]={0};
struct Node{
Node(int a,int b):t(a),x(b){};
Node(){};
int t,x;
}now;
queue<Node> q;
queue<int> ans;
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n,k,t,x;
int cnt=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>t>>k;
while(!q.empty() && q.front().t+86400<=t){
now=q.front();
flag[now.x]--;
if(flag[now.x]==0)
cnt--;
q.pop();
}
for(int j=0;j<k;j++){
cin>>x;
flag[x]++;
q.push(Node(t,x));
if(flag[x]==1){
cnt++;
}
}
ans.push(cnt);
}
while(!ans.empty()){
cout<<ans.front()<<endl;
ans.pop();
}
return 0;
}