题目链接:http://codeforces.com/contest/705/problem/C
比赛的时候莫名其妙的WA第四组数据,不知道为什么,比赛结束之后看数据,第四组数据量太大也不大想看,把之前写的vector改成queue,数组用的set集合,然后再交就过了……应该是哪里写丑了。
思路就是存储所有的数据在set集合中,通过不停的删除和增加来进行计算。
#include <set>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 300000+5;
int n,q,t,type,x,num;
set<int> S;
queue<int> Q[maxn];
int main()
{
scanf("%d%d", &n, &q);
for(int i=0; i<q; i++)
{
scanf("%d%d", &type, &x);
if(type == 1)
{
Q[x].push(t);
S.insert(t++);
num++;
}
else if(type == 2)
{
while(!Q[x].empty())
{
if(S.count(Q[x].front()) == 1)
{
S.erase(Q[x].front());
num--;
}
Q[x].pop();
}
}
else
{
for(set<int>::iterator it = S.begin(); it != S.end(); )
{
if(*it < x)
{
S.erase(it++);
num--;
}
else break;
}
}
printf("%d\n", num);
}
}