#include <bits/stdc++.h>
using namespace std;
unordered_set<long long>tab;
bool usuw(long long k, const unordered_set<long long>& pom){
int p1=k>>32,p2=k&0xffffffff;
return(!pom.count(((long long)(p1-1)<<32)+p2)&&!pom.count(((long long)(p1+1)<<32)+p2))||(!pom.count(((long long)p1<<32)+(p2+1))&&!pom.count(((long long)p1<<32)+(p2-1)));
}
int wynik(){
unordered_set<long long>pom=tab;
queue<long long>kol;
for(auto x:pom)if(usuw(x,pom))kol.push(x);
long long a;
while(!kol.empty()){
a=kol.front(); kol.pop();
if(pom.find(a)==pom.end())continue;
pom.erase(a);
int ax=a>>32,ay=a&0xffffffff;
long long sas;
sas=(long long)ax<<32+ay-1;
if(pom.find(sas)!=pom.end()&&usuw(sas,pom))kol.push(sas);
sas=(long long)ax<<32+ay+1;
if(pom.find(sas)!=pom.end()&&usuw(sas,pom))kol.push(sas);
sas=(((long long)(ax-1))<<32)+ay;
if(pom.find(sas)!=pom.end()&&usuw(sas,pom))kol.push(sas);
sas=(((long long)(ax+1))<<32)+ay;
if(pom.find(sas)!=pom.end()&&usuw(sas,pom))kol.push(sas);
}
return pom.size();
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n,m,k,q,x,y;
cin>>n>>m>>k>>q;
for (int i=0;i<k;i++){
cin>>x>>y;
tab.insert(((long long)x<<32)+y);
}
cout<<tab.size()-wynik()<<"\n";
long long p;
for(int i=0;i<q;i++){
cin>>x>>y;
p=((long long)x<<32)+y;
if(tab.count(p))tab.erase(p);
else tab.insert(p);
cout<<tab.size()-wynik()<<"\n";
}
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; unordered_set<long long>tab; bool usuw(long long k, const unordered_set<long long>& pom){ int p1=k>>32,p2=k&0xffffffff; return(!pom.count(((long long)(p1-1)<<32)+p2)&&!pom.count(((long long)(p1+1)<<32)+p2))||(!pom.count(((long long)p1<<32)+(p2+1))&&!pom.count(((long long)p1<<32)+(p2-1))); } int wynik(){ unordered_set<long long>pom=tab; queue<long long>kol; for(auto x:pom)if(usuw(x,pom))kol.push(x); long long a; while(!kol.empty()){ a=kol.front(); kol.pop(); if(pom.find(a)==pom.end())continue; pom.erase(a); int ax=a>>32,ay=a&0xffffffff; long long sas; sas=(long long)ax<<32+ay-1; if(pom.find(sas)!=pom.end()&&usuw(sas,pom))kol.push(sas); sas=(long long)ax<<32+ay+1; if(pom.find(sas)!=pom.end()&&usuw(sas,pom))kol.push(sas); sas=(((long long)(ax-1))<<32)+ay; if(pom.find(sas)!=pom.end()&&usuw(sas,pom))kol.push(sas); sas=(((long long)(ax+1))<<32)+ay; if(pom.find(sas)!=pom.end()&&usuw(sas,pom))kol.push(sas); } return pom.size(); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m,k,q,x,y; cin>>n>>m>>k>>q; for (int i=0;i<k;i++){ cin>>x>>y; tab.insert(((long long)x<<32)+y); } cout<<tab.size()-wynik()<<"\n"; long long p; for(int i=0;i<q;i++){ cin>>x>>y; p=((long long)x<<32)+y; if(tab.count(p))tab.erase(p); else tab.insert(p); cout<<tab.size()-wynik()<<"\n"; } return 0; } |
English