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