题解:AT_abc366_c [ABC366C] Balls and Bag Query

· · 题解

题面

有一个空的袋子,现在要对它进行 N 次操作。

每个操作都是这样的:

再看一眼数据范围:

这时就有了一个思路:桶。

我们让 f[i] 表示种类为 i 的球此时的数量,应对每个操作时只需:

很显然我们又遇到了一个问题:操作 3 怎么办? 我们使用一个变量 sum 记录此时袋子里的球的种类数,这个问题基本上就解决了。但怎么维护这个变量呢?

维护方法:

int f[1000010];

int main(){ int n,sum=0; cin>>n; while(n--){ int op; cin>>op; if(op==1){ int x; cin>>x; if(f[x]==0)sum++; f[x]++; }else if(op==2){ int x; cin>>x; f[x]--; if(f[x]==0)sum--; }else{ cout<<sum<<endl; } } return 0; } // 就这么短吗?