维护一个 s u m sum sum 值,为当前数字的种类数。再维护 c n t i cnt_i cnti 表示数字 i i i 的个数。
对于 3 3 3 操作,直接输出 s u m sum sum 即可。
对于 1 1 1 操作, c n t x ← c n t x + 1 cnt_x\gets cnt_x+1 cntx←cntx+1,如果加完后 c n t x cnt_x cntx 为 1 1 1,说明这是一个新的数字, s u m ← s u m + 1 sum\gets sum+1 sum←sum+1。
对于 2 2 2 操作, c n t x ← c n t x − 1 cnt_x\gets cnt_x-1 cntx←cntx−1,如果减完后 c n t x cnt_x cntx 为 0 0 0,说明这个数字没有了, s u m ← s u m − 1 sum\gets sum-1 sum←sum−1。
signed main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> q;
while (q--) {
int opt, x; cin >> opt;
if (opt == 3) cout << sum << '\n';
else if (opt == 1) {
cin >> x;
cnt[x] ++;
sum += (cnt[x] == 1);
}
else {
cin >> x;
cnt[x] --;
sum -= (!cnt[x]);
}
}
return 0;
}