CF704A

来源:互联网 发布:淘宝信用贷款影响大吗 编辑:程序博客网 时间:2024/06/16 04:41

题目链接

    题目大意, Thor(雷神)初来地球, 洛基给了他一个smartphone(智能机). 手机上有n个app. Thor对这个手机十分感兴趣. 有一点疑惑是, 他无法统计由这些app产生的未读的信息(或许的洛基下的诅咒---什么鬼哦).    现在有q个事件发生, 分为3种类型.    1. app x 获得一个未读信息    2. 读取 app x 的所有信息    3. Thor 将会读取由app产生的前t条信息(notifications generated in first t events of the first type). 保证至少有t个第一种事件. Please note that he doesn't read first t unread notifications, he just reads the very first t notifications generated on his phone and he may re-read some of them in this operation.    题意不是很好理解(So poor in english), 主要是第三种类型····    先入先出...队列    用一个队列来记录事件(编号加内容)    用一个数组来标记事件是否访问过    再用一个队列(也可以用其他的方法)来记录app的信息    然后模拟...
#include<cstdio>#include<queue>using namespace std;int n, q, t, a;int s;int f[300001];queue<int> Q[300001];queue< pair<int, int> >time;int main(){    scanf("%d %d", &n, &q);    int p = 1;    while ( q -- )    {        scanf("%d %d", &t, &a);        if ( t == 1 )        {            Q[a].push(p);            time.push(make_pair(p, a));            s ++;            p ++;        }        else if ( t == 2  )        {            while ( !Q[a].empty() )            {                f[Q[a].front()] = 1;                Q[a].pop();                s --;            }        }        else        {            while ( !time.empty() && time.front().first <= a )            {                if ( !f[time.front().first] )                {                    Q[time.front().second].pop();                    s --;                }                time.pop();            }        }        printf("%d\n", s);    }    return 0;}
0 0
原创粉丝点击