#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
int h, w, n, m;
cin >> h >> w >> n >> m;
int res = 0;
map<pair<int,int>,int> tiles;
auto has_square = [&](int x, int y) {
for (int dx = 0; dx < 2; dx++) {
for (int dy = 0; dy < 2; dy++) {
if (!tiles.count(make_pair(x+dx, y+dy))) return false;
}
}
return true;
};
auto add_square = [&](int x, int y, int delta) {
for (int dx = 0; dx < 2; dx++) {
for (int dy = 0; dy < 2; dy++) {
auto pr = make_pair(x+dx, y+dy);
if (tiles[pr] == 0) res--;
tiles[pr] += delta;
if (tiles[pr] == 0) res++;
}
}
};
for (int q = 0; q < n+m; q++) {
int x, y;
cin >> x >> y;
auto pr = make_pair(x, y);
if (!tiles.count(pr)) {
tiles[pr] = 0;
res++;
for (int dx = 0; dx < 2; dx++) {
for (int dy = 0; dy < 2; dy++) {
if (has_square(x-1+dx, y-1+dy)) {
add_square(x-1+dx, y-1+dy, 1);
}
}
}
} else {
for (int dx = 0; dx < 2; dx++) {
for (int dy = 0; dy < 2; dy++) {
if (has_square(x-1+dx, y-1+dy)) {
add_square(x-1+dx, y-1+dy, -1);
}
}
}
tiles.erase(pr);
res--;
}
if (q >= n-1) cout << res << '\n';
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <bits/stdc++.h> using namespace std; using i64 = long long; int main() { int h, w, n, m; cin >> h >> w >> n >> m; int res = 0; map<pair<int,int>,int> tiles; auto has_square = [&](int x, int y) { for (int dx = 0; dx < 2; dx++) { for (int dy = 0; dy < 2; dy++) { if (!tiles.count(make_pair(x+dx, y+dy))) return false; } } return true; }; auto add_square = [&](int x, int y, int delta) { for (int dx = 0; dx < 2; dx++) { for (int dy = 0; dy < 2; dy++) { auto pr = make_pair(x+dx, y+dy); if (tiles[pr] == 0) res--; tiles[pr] += delta; if (tiles[pr] == 0) res++; } } }; for (int q = 0; q < n+m; q++) { int x, y; cin >> x >> y; auto pr = make_pair(x, y); if (!tiles.count(pr)) { tiles[pr] = 0; res++; for (int dx = 0; dx < 2; dx++) { for (int dy = 0; dy < 2; dy++) { if (has_square(x-1+dx, y-1+dy)) { add_square(x-1+dx, y-1+dy, 1); } } } } else { for (int dx = 0; dx < 2; dx++) { for (int dy = 0; dy < 2; dy++) { if (has_square(x-1+dx, y-1+dy)) { add_square(x-1+dx, y-1+dy, -1); } } } tiles.erase(pr); res--; } if (q >= n-1) cout << res << '\n'; } } |
English