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
79
80
81
82
83
84
85
86
87
88
#include <cstdio>

bool **board;

bool is_sciagalne(int x, int y, bool **_board) {
  // printf("%d %d\n", x, y);
  return (!_board[x + 1][y] && !_board[x - 1][y]) ||
         (!_board[x][y + 1] && !_board[x][y - 1]);
}

int solve(int n, int m) {
  int result = 0;
  int changes;
  bool **board_copy;

  board_copy = new bool *[n + 2];

  for (int i = 0; i < n + 2; i++) {
    board_copy[i] = new bool[m + 2];

    for (int j = 0; j < m + 2; j++) {
      board_copy[i][j] = board[i][j];
    }
  }

  do {
    changes = 0;

    for (int i = 1; i < n + 1; i++) {
      for (int j = 1; j < m + 1; j++) {
        if (board_copy[i][j] && is_sciagalne(i, j, board_copy)) {
          changes++;
          board_copy[i][j] = false;
        }
      }
    }

    result += changes;
  } while (changes);

  return result;
}

int main() {
  int n, m, k, q;

  scanf("%d %d %d %d", &n, &m, &k, &q);

  board = new bool *[n + 2];

  for (int i = 0; i < n + 2; i++) {
    board[i] = new bool[m + 2];

    for (int j = 0; j < m + 2; j++) {
      board[i][j] = false;
    }
  }

  for (int i = 0; i < k; i++) {
    int x, y;
    scanf("%d %d", &x, &y);

    // printf("%d %d\n", x, y);

    board[x][y] = true;
  }

  // for (int i = 0; i < n + 2; i++) {
  //   for (int j = 0; j < m + 2; j++) {
  //     printf("%d", board[i][j]);
  //   }
  //   puts("");
  // }

  printf("%d\n", solve(n, m));

  for (int i = 0; i < q; i++) {
    int x, y;

    scanf("%d %d", &x, &y);

    board[x][y] = !board[x][y];

    printf("%d\n", solve(n, m));
  }

  return 0;
}