#include<bits/stdc++.h>
using namespace std;
#define p pair<int, int>
const int MAXK = 75e3 + 7;
map<p, int> is_pkt;
bool spr(p pkt){
if(!is_pkt[pkt]) return 0;
int x = pkt.first, y = pkt.second;
if(!is_pkt[{x + 1, y}] && !is_pkt[{x - 1, y}]) return 1;
if(!is_pkt[{x, y + 1}] && !is_pkt[{x, y - 1}]) return 1;
return 0;
}
int querry(vector<p> &points, int k){
queue<pair<int, int>> qu;
for(int i = 0; i < k; i++){
if(spr(points[i])){
is_pkt[points[i]] = 0;
qu.push(points[i]);
}
}
vector<int> pion = {1, 0, -1, 0};
vector<int> poz = {0, -1, 0, 1};
int wyn = 0;
while(!qu.empty()){
p act = qu.front();
qu.pop();
is_pkt[act] = 0;
wyn++;
int x = act.first, y = act.second;
for(int i = 0; i < 4; i++){
int nx = x + pion[i], ny = y + poz[i];
if(spr({nx, ny})){
is_pkt[{nx, ny}] = 0;
qu.push({nx, ny});
}
}
}
return wyn;
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
int n, m, k, q;
cin >> n >> m >> k >> q;
vector<p> points(k);
for(int i = 0; i < k; i++){
int x, y;
cin >> x >> y;
points[i] = {x, y};
is_pkt[{x, y}] = 1;
}
cout << querry(points, k) << '\n';
for(int i = 0; i < k; i++){
is_pkt[points[i]] = 1;
}
int x, y;
cin >> x >> y;
is_pkt[{x, y}] ^= 1;
cout << querry(points, k) << '\n';
// bitset<MAXK> visited;
// cout << wyn << '\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 78 | #include<bits/stdc++.h> using namespace std; #define p pair<int, int> const int MAXK = 75e3 + 7; map<p, int> is_pkt; bool spr(p pkt){ if(!is_pkt[pkt]) return 0; int x = pkt.first, y = pkt.second; if(!is_pkt[{x + 1, y}] && !is_pkt[{x - 1, y}]) return 1; if(!is_pkt[{x, y + 1}] && !is_pkt[{x, y - 1}]) return 1; return 0; } int querry(vector<p> &points, int k){ queue<pair<int, int>> qu; for(int i = 0; i < k; i++){ if(spr(points[i])){ is_pkt[points[i]] = 0; qu.push(points[i]); } } vector<int> pion = {1, 0, -1, 0}; vector<int> poz = {0, -1, 0, 1}; int wyn = 0; while(!qu.empty()){ p act = qu.front(); qu.pop(); is_pkt[act] = 0; wyn++; int x = act.first, y = act.second; for(int i = 0; i < 4; i++){ int nx = x + pion[i], ny = y + poz[i]; if(spr({nx, ny})){ is_pkt[{nx, ny}] = 0; qu.push({nx, ny}); } } } return wyn; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); int n, m, k, q; cin >> n >> m >> k >> q; vector<p> points(k); for(int i = 0; i < k; i++){ int x, y; cin >> x >> y; points[i] = {x, y}; is_pkt[{x, y}] = 1; } cout << querry(points, k) << '\n'; for(int i = 0; i < k; i++){ is_pkt[points[i]] = 1; } int x, y; cin >> x >> y; is_pkt[{x, y}] ^= 1; cout << querry(points, k) << '\n'; // bitset<MAXK> visited; // cout << wyn << '\n'; } |
English