P2058 海港

用队列维护的一个二十四小时的滑动窗口

#include<iostream>
#include<cstring>

using namespace std;

const int N = 100010;

struct Node{
    int t, c; // 时间,国家
};

int n;
int cnt[N];
Node q[N * 3];
int tt = -1, hh;

int main(){
    cin >> n;
    
    int res = 0;
    while(n --){
        int t, k;
        
        cin >> t >> k;
        
        while(hh <= tt && q[hh].t <= t - 86400){
            cnt[q[hh].c] --;
            if(cnt[q[hh].c] == 0) res --;
            hh ++;
        }
        
        for(int i = 0; i < k; i ++){
            int c;
            cin >> c;
            q[++ tt] = {t, c};
            cnt[c] ++;
            if(cnt[c] == 1) res ++;
        }
        
        cout << res << endl;
    }
    
    return 0;
}
posted @ 2020-10-21 11:12  yys_c  阅读(58)  评论(0编辑  收藏  举报