#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'; } } |