P2058 [NOIP 2016 普及组] 海港

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct node{
    int x,t; //x国籍,t到港时间 
};
queue<node> q; //结构体队列 
int vis[N]; //vis[i]:标记国籍i在港的数量 
int n,ans; //ans在港的不同国籍数量 
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        int t,m,x;
        cin >> t >> m; //先输入船只到港时间t,船上人数m 
        for(int j = 1; j <= m; j++) //接下来是m个人的国籍输入
        {
            cin >> x;
            q.push({x,t}); //将每个人加入海港队列 
            vis[x]++;
            if(vis[x] == 1) ans++; //该国籍首次出现,则国籍种类数ans+1 
        } 
        //接下来处理海港队列中,因超时要离港的人  当前时间t - 队首到港时间q.front().t >= 86400,那么队首离港 
        while(t - q.front().t >= 86400)
        {
            int x = q.front().x;   q.pop(); //取出队首并出队 
            vis[x]--;
            if(vis[x] == 0) ans--; //离港的人国籍数量-1,如果国际数量=0,则种类数ans-1         
        } 
        cout << ans << endl; //处理完入港、离港后,输出当前港上国籍人数 
    }
    return 0;
}

 

posted @ 2025-05-27 16:08  CRt0729  阅读(32)  评论(0)    收藏  举报