1784: Camellia的难题
Time Limit: 2 Sec
Memory Limit: 128 MB
Submit: 58
Solved: 13
Submit
Status
Web Board
Description
Camellia遇到了一个问题,她无法解决所以来求助豆子,以下是豆子所理解的问题:给定1000万个点,编号1-1000万。每个点都有一个值,初始的时候均为-1,有n个操作,操作有以下五种。
1 x 代表将x点更新为i,i为第几次操作。
2 x 代表将x点更新为-1。
3 代表把所有的点变为-1。
4 x 查询x点的值。
5 查询1000万个点里有多少个点不是-1。
亲爱的同学,你能帮助他们解决这个问题么?
Input
首先输入一个t(t<10)代表t组数组,接下来每组数据首先输入一个n(n<100万)代表n次操作,接下来n行每行一种操作。
Output
对于4、5操作来言,输出它们的答案。
Sample Input
1
8
1 2 0
1 15
4 20
5
2 15
5
3
5
Sample Output
1
2
1
0
太坑了(花了两个小时),条件太多,判断不过来了。。
#include<stdio.h>
#include<string.h>
int a[10000010];
int b[10000010];
int main()
{
int t,n,m,mm,i,j,k,kk;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
mm=0;kk=0;
memset(a,-1,sizeof(a));
memset(b,0,sizeof(b));
for(i=1;i<=n;i++)
{
scanf("%d",&m);
if(m==1)
{
scanf("%d",&k);
if(a[k]==-1)
{
mm++;
b[kk++]=k;
}
a[k]=i;
}
else if(m==2)
{
scanf("%d",&k);
if(a[k]!=-1)
{
a[k]=-1;
if(mm>0)
mm--;
else
mm=0;
}
}
else if(m==3)
{
for(j=0;j<kk;j++)
a[b[j]]=-1;
mm=0;
kk=0;
}
else if(m==4)
{
scanf("%d",&k);
printf("%d\n",a[k]);
}
else if(m==5)
printf("%d\n",mm);
}
}
return 0;
}