zoukankan      html  css  js  c++  java
  • codeforces 704A (队列模拟) Thor

    题目:这里

    题意:n个app,q个操作,当操作数type为1的时候表示y这个app推送了你一条消息,当操作数type为2的时候表示将y这个app已推送的所有消息都读完,当操作数为3的时候

    表示将已经推送的前(按推送的时间顺序)y条消息再读一遍(不管这前y条消息中有没有读过的,都再读一遍),问每次操作的时候的未读的消息数是多少?

    用队列来模拟就好,记得每次要输出的是所有app的没有读过的消息的总数就行,不要想的太细,把读过的标记一下就行,总是觉得这个会超时,但是一想这才是2的第三题,1

    的第一题,应该不会那么卡时间,所有就大着胆子写了。

     1 //队列只要记录cas就行了,并不需要记录y
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<cstring>
     7 #include<queue>
     8 using namespace std;
     9 
    10 const int M = 3e5 + 10;
    11 bool vi[M];
    12 queue<pair<int,int> >q[M];
    13 
    14 int main()
    15 {
    16     int n,m;
    17     long long ans=0;
    18     scanf("%d%d",&n,&m);
    19     int po=1,cas=0,r=0;
    20     memset(vi,false,sizeof(vi));
    21     while (m--)
    22     {
    23         int x,y;
    24         scanf("%d%d",&x,&y);
    25         if (x==1) q[y].push(make_pair<int,int>(y,++cas)),ans++;
    26         else if (x==2) {
    27             while (!q[y].empty())
    28             {
    29                 int w=q[y].front().second;
    30                 if (vi[w]==false) ans--;
    31                 vi[w]=true;
    32                 q[y].pop();
    33             }
    34         }
    35         else {
    36             for (int i=po ; i<=min(cas,y) ; i++)
    37             {
    38                  if (vi[i]==false) ans--;
    39                  vi[i]=true;
    40             }
    41             po=max(po,y);
    42         }
    43         printf("%I64d
    ",ans);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    C# 发送匿名邮件
    上传大文件,Web.config中的配置
    老话题关于文章自动分页
    scrollLeft,scrollWidth,clientWidth,offsetWidth到底指的哪到哪的距离
    转成静态页面,由于ie网址或路径原因,Atlas失效。
    让图片自适应大小的方法
    textoverflow 全兼容
    ISAPI_rewrite中文手册
    ISAPI_Rewrite集
    无限级下拉列表框控件
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/5768705.html
Copyright © 2011-2022 走看看