AT_abc366_C 题解
题意:
题目要求支持三种操作,插入一个元素,删除一个元素,和查询某元素还剩几个,其中保证要求删除的元素至少存在一个。
做法:
开一个桶就行,这里用的是 map 。
每次插入 \(x\) 就在键 \(x\) 的位置上加 \(1\) 。
每次删除 \(x\) 就在键 \(x\) 的位置上减 \(1\) 。
需要注意的是,若是一个数的值被删成 \(0\) ,那么这个键值对还是存在于 map 里的,需要手动删除(真正的干掉)。
由于 map 太慢,所以一开始我打的时候就是用的 unordered_map 。这玩意可是要比 map 快好多倍,而且和 map 的操作基本一致,所以放心用就可以了。
代码:
#include<bits/stdc++.h>
typedef long long int ll;
using namespace std;
int n,op,x;
unordered_map<int,int>mp;
int main(){
ios::sync_with_stdio(0);
cin.tie(nullptr);cout.tie(nullptr);
cin>>n;
while(n--){
cin>>op;
if(op==1){
cin>>x;
mp[x]++;
}
if(op==2){
cin>>x;
mp[x]--;
if(!mp[x])mp.erase(x);
}
if(op==3){
cout<<mp.size()<<"\n";
}
}
return 0;
}

浙公网安备 33010602011771号