#include<set>
#include<map>
#include<queue>
#include<vector>
#include<algorithm>
#include<bits/stdc++.h>
#define pr pair
#define f first
#define s second
#define ll long long
#define mp make_pair
#define pll pr<ll,ll>
#define pii pr<int,int>
#define piii pr<int,pii>
using namespace std;
set<pii> gd;
set<pii> al;
void upd(int x,int y)
{
if(al.find(mp(x,y))==al.end()) return;
if(al.find(mp(x-1,y))==al.end()&&al.find(mp(x+1,y))==al.end()) gd.insert(mp(x,y));
else if(al.find(mp(x,y-1))==al.end()&&al.find(mp(x,y+1))==al.end()) gd.insert(mp(x,y));
else gd.erase(mp(x,y));
}
void add(int x,int y)
{
al.insert(mp(x,y));
upd(x,y);
upd(x-1,y);
upd(x+1,y);
upd(x,y-1);
upd(x,y+1);
}
void del(int x,int y)
{
al.erase(mp(x,y));
gd.erase(mp(x,y));
upd(x-1,y);
upd(x+1,y);
upd(x,y-1);
upd(x,y+1);
}
set<pii> fa;
void calc()
{
al.clear();
gd.clear();
for(pii i:fa) add(i.f,i.s);
while(gd.size())
{
pii f=*gd.begin();
gd.erase(gd.begin());
del(f.f,f.s);
}
cout<<fa.size()-al.size()<<'\n';
}
int main()
{
ios_base::sync_with_stdio(0);
int n,m,k,q;
cin>>n>>m>>k>>q;
for(int i=0;i<k;i++)
{
int x,y;
cin>>x>>y;
fa.insert(mp(x,y));
}
calc();
int x,y;
while(q--)
{
cin>>x>>y;
if(fa.find(mp(x,y))==fa.end()) fa.insert(mp(x,y));
else fa.erase(mp(x,y));
calc();
}
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 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<set> #include<map> #include<queue> #include<vector> #include<algorithm> #include<bits/stdc++.h> #define pr pair #define f first #define s second #define ll long long #define mp make_pair #define pll pr<ll,ll> #define pii pr<int,int> #define piii pr<int,pii> using namespace std; set<pii> gd; set<pii> al; void upd(int x,int y) { if(al.find(mp(x,y))==al.end()) return; if(al.find(mp(x-1,y))==al.end()&&al.find(mp(x+1,y))==al.end()) gd.insert(mp(x,y)); else if(al.find(mp(x,y-1))==al.end()&&al.find(mp(x,y+1))==al.end()) gd.insert(mp(x,y)); else gd.erase(mp(x,y)); } void add(int x,int y) { al.insert(mp(x,y)); upd(x,y); upd(x-1,y); upd(x+1,y); upd(x,y-1); upd(x,y+1); } void del(int x,int y) { al.erase(mp(x,y)); gd.erase(mp(x,y)); upd(x-1,y); upd(x+1,y); upd(x,y-1); upd(x,y+1); } set<pii> fa; void calc() { al.clear(); gd.clear(); for(pii i:fa) add(i.f,i.s); while(gd.size()) { pii f=*gd.begin(); gd.erase(gd.begin()); del(f.f,f.s); } cout<<fa.size()-al.size()<<'\n'; } int main() { ios_base::sync_with_stdio(0); int n,m,k,q; cin>>n>>m>>k>>q; for(int i=0;i<k;i++) { int x,y; cin>>x>>y; fa.insert(mp(x,y)); } calc(); int x,y; while(q--) { cin>>x>>y; if(fa.find(mp(x,y))==fa.end()) fa.insert(mp(x,y)); else fa.erase(mp(x,y)); calc(); } return 0; } |
English