rt,具体做法是打时间戳,然后懒惰删除:WA 79pts
#include <bits/stdc++.h>
using namespace std;
unordered_map<int, int> cnt, f1;
map<pair<int, int>, int> mp, f2;
signed main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int n; cin >> n;
int s = 0, f = 0, last = 0;
for (int i = 1; i <= n; i++) {
int op, k, b; cin >> op >> k >> b;
pair<int, int> p = {k ,b};
if (f && k != last) {
if (f1[k] != f) {
cnt[k] = 0;
f1[k] = f;
}
if (f2[p] != f) {
mp[p] = 0;
f2[p] = f;
}
}
if (op == 1) {
s++;
cnt[k]++;
mp[p]++;
}
else if (op == 2) {
cout << s - cnt[k] << '\n';
}
else {
cnt[k] -= mp[p];
s = cnt[k];
mp[p] = 0;
f = i;
last = k;
}
}
return 0;
}
稍微改动(但明显假)的做法竟然优势互补