码迷,mamicode.com
首页 > 其他好文 > 详细

第五周 8.8 --- 8.14

时间:2016-08-08 06:34:40      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

新的一周了诶..

8.8

做cf

看了一天博弈于是B想得好复杂..一直算 sg算不对..

c 是不懂要怎么处理 前 t 秒里面 没有被 2 操作 操作掉的数

cf 366 div2 c C - Thor

给每个节点 一个队列,队列里面存放的就是 对应它添加进来的时间,

在 3 操作 的时候,可以维护 一个位置 ,假如上次是操作到t1 那么这次的操作 就只需要 t1 到 t2就可以了

没想到把每一个时间当成一个东西丢进队列里面..

技术分享
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <time.h>
 5 #include <math.h>
 6 #include <vector>
 7 #include <map>
 8 #include <set>
 9 #include <stack>
10 #include <queue>
11 #include <string>
12 #include <iostream>
13 #include <algorithm>
14 using namespace std;
15 
16 typedef long long LL;
17 typedef pair<int,int> pii;
18 typedef pair<double,double> pdd;
19 const double eps = 1e-8;
20 const int INF = (1 << 30) - 1;
21 const int maxn = 300010;
22 int n,m,que[maxn];
23 queue<int> q[maxn];
24 
25 void solve(){
26     int op,x,t = 0,ans = 0,pos = 0;
27     memset(que,-1,sizeof(que));
28     for(int i = 1;i <= m;i++){
29         scanf("%d %d",&op,&x);
30         if(op == 1){
31             que[++t] = x;
32             q[x].push(t);
33             ans++;
34         }
35         else if(op == 2){
36             while(!q[x].empty()){
37                 int u = q[x].front();q[x].pop();
38                 que[u] = -1;
39                 ans--;
40             }
41         }
42         else{
43             int top = min(t,x);
44             for(int i = pos+1;i <= top;i++){
45                 if(que[i] == -1) continue;
46                 int v = que[i];
47                 q[v].pop();
48                 ans--;
49             }
50             pos = max(pos,top);
51         }
52         printf("%d\n",ans);
53     }
54 }
55 
56 int main(){
57     scanf("%d %d",&n,&m);
58     solve();
59     return 0;
60 }
View Code

 

第五周 8.8 --- 8.14

标签:

原文地址:http://www.cnblogs.com/wuyuewoniu/p/5747888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!