0
点赞
收藏
分享

微信扫一扫

zzulioj 1784: Camellia的难题 (暴力) 好坑


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;
}



举报

相关推荐

ZZULIOJ:1157: 连续的n个1

0 条评论