【数据结构1-1】线性表 [NOIP2016 普及组] 海港

题解

因为要统计近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;
}
上一篇:计数排序


下一篇:后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载