題名
n個の辺があり、対応する長さを指定すると、m個のクエリがあり、そのたびに「+」:木の棒を追加するか、「-」:木の棒を減らして、正方形と長方形を形成できるかどうかを尋ねます。四辺形を重ねることはできません。縮小するときは、この長さのスティックが必要です。
#include <bits/stdc++.h>
using namespace std;
int n, x, cnt2, cnt4;
unordered_map<int, int> ma;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &x);
ma[x]++;
if (ma[x] % 2 == 0) cnt2++;
if (ma[x] % 4 == 0) cnt4++;
}
int q;
scanf("%d", &q);
while (q--) {
char op[2];
scanf("%s", op);
scanf("%d", &x);
if (op[0] == '+') {
ma[x]++;
if (ma[x] % 2 == 0) cnt2++;
if (ma[x] % 4 == 0) cnt4++;
} else {
if (ma[x] % 2 == 0) cnt2--;
if (ma[x] % 4 == 0) cnt4--;
ma[x]--;
}
if (cnt2 >= 4 && cnt4 >= 1)puts("YES");
else puts("NO");
}
return 0;
}