#include <bits/stdc++.h>
#define ll long long
#define ve vector
#define fi first
#define se second
#define ld double
#define all(x) x.begin(), x.end()
using namespace std;
typedef pair<int, int> pii;
set<pii> a;
map<pii, int> cnt;
int ans = 0;
bool check(int x, int y)
{
for (int dx = 0; dx <= 1; dx++)
for (int dy = 0; dy <= 1; dy++)
if (a.find({x + dx, y + dy}) == a.end())
return 0;
return 1;
}
void add(int x, int y, int a)
{
for (int dx = 0; dx <= 1; dx++)
for (int dy = 0; dy <= 1; dy++)
{
ans -= (bool)cnt[{x + dx, y + dy}];
cnt[{x + dx, y + dy}] += a;
ans += (bool)cnt[{x + dx, y + dy}];
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, m, k, q;
cin >> n >> m >> k >> q;
for (int i = 0; i < k; i++)
{
int x, y;
cin >> x >> y;
a.insert({x, y});
for (int dx = 0; dx <= 1; dx++)
for (int dy = 0; dy <= 1; dy++)
if (check(x - dx, y - dy))
add(x - dx, y - dy, 1);
}
cout << a.size() - ans << "\n";
while (q--)
{
int x, y;
cin >> x >> y;
if (a.find({x, y}) == a.end())
{
a.insert({x, y});
for (int dx = 0; dx <= 1; dx++)
for (int dy = 0; dy <= 1; dy++)
if (check(x - dx, y - dy))
add(x - dx, y - dy, 1);
}
else
{
for (int dx = 0; dx <= 1; dx++)
for (int dy = 0; dy <= 1; dy++)
if (check(x - dx, y - dy))
add(x - dx, y - dy, -1);
a.erase({x, y});
}
cout << a.size() - ans << "\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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <bits/stdc++.h> #define ll long long #define ve vector #define fi first #define se second #define ld double #define all(x) x.begin(), x.end() using namespace std; typedef pair<int, int> pii; set<pii> a; map<pii, int> cnt; int ans = 0; bool check(int x, int y) { for (int dx = 0; dx <= 1; dx++) for (int dy = 0; dy <= 1; dy++) if (a.find({x + dx, y + dy}) == a.end()) return 0; return 1; } void add(int x, int y, int a) { for (int dx = 0; dx <= 1; dx++) for (int dy = 0; dy <= 1; dy++) { ans -= (bool)cnt[{x + dx, y + dy}]; cnt[{x + dx, y + dy}] += a; ans += (bool)cnt[{x + dx, y + dy}]; } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m, k, q; cin >> n >> m >> k >> q; for (int i = 0; i < k; i++) { int x, y; cin >> x >> y; a.insert({x, y}); for (int dx = 0; dx <= 1; dx++) for (int dy = 0; dy <= 1; dy++) if (check(x - dx, y - dy)) add(x - dx, y - dy, 1); } cout << a.size() - ans << "\n"; while (q--) { int x, y; cin >> x >> y; if (a.find({x, y}) == a.end()) { a.insert({x, y}); for (int dx = 0; dx <= 1; dx++) for (int dy = 0; dy <= 1; dy++) if (check(x - dx, y - dy)) add(x - dx, y - dy, 1); } else { for (int dx = 0; dx <= 1; dx++) for (int dy = 0; dy <= 1; dy++) if (check(x - dx, y - dy)) add(x - dx, y - dy, -1); a.erase({x, y}); } cout << a.size() - ans << "\n"; } } |
English