题解:AT_abc366_c [ABC366C] Balls and Bag Query

题意

给你一个可重集,要求支持插入,删除,元素种类查询三种操作。

分析

直接乱搞,用一个桶记录每种数字的出现次数,再用一个变量 \(sum\) 记录元素种类数。

插入的时候看看当前该元素出现次数是否为 \(1\),删除的时候看看当前元素出现次数是否为 \(0\),如果是的话让 \(sum\) 相应加减即可。

查询的时候直接输出 \(sum\)

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
	int w=1,s=0;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') w=-1;ch=getchar();}
	while(isdigit(ch)){s=s*10+(ch-'0');ch=getchar();}
	return w*s;
}
const int maxn=1e6+10;
const int mod=1e9+7;
int Q;
int cnt[maxn],ans;
signed main()
{
//	freopen("xxx.in","r",stdin);
//	freopen("xxx.out","w",stdout);
	cin>>Q;
	while(Q--)
	{
		int opt=read();
		if(opt==1)
		{
			int x=read();
			cnt[x]++;
			if(cnt[x]==1)
			{
				ans++;
			}
		}
		else if(opt==2)
		{
			int x=read();
			cnt[x]--;
			if(cnt[x]==0)
			{
				ans--;
			}
		}
		else printf("%lld\n",ans);
	}
	return 0;
}

posted @ 2024-08-12 08:33  Redamancy_Lydic  阅读(10)  评论(0编辑  收藏  举报