from sys import stdin, stdout def brute(klocki): count_start = len(klocki) to_remove = [] klocki_left = klocki.copy() for k in klocki: up = (k[0] - 1, k[1]) down = (k[0] + 1, k[1]) left = (k[0], k[1]-1) right = (k[0], k[1]+1) if (up not in klocki_left) and (down not in klocki_left): if left in klocki_left: to_remove.append(left) if right in klocki_left: to_remove.append(right) if k in klocki_left: klocki_left.remove(k) if (left not in klocki_left) and (right not in klocki_left): if up in klocki_left: to_remove.append(up) if down in klocki_left: to_remove.append(down) if k in klocki_left: klocki_left.remove(k) i = 0 while i < len(to_remove): k = to_remove[i] up = (k[0] - 1, k[1]) down = (k[0] + 1, k[1]) left = (k[0], k[1]-1) right = (k[0], k[1]+1) if (up not in klocki_left) and (down not in klocki_left): if left in klocki_left: to_remove.append(left) if right in klocki_left: to_remove.append(right) if k in klocki_left: klocki_left.remove(k) if (left not in klocki_left) and (right not in klocki_left): if up in klocki_left: to_remove.append(up) if down in klocki_left: to_remove.append(down) if k in klocki_left: klocki_left.remove(k) i += 1 return count_start - len(klocki_left) n, m, k, q = [int(x) for x in stdin.readline().split()] klocki_start = set() for _ in range(k): x, y = [int(x) for x in stdin.readline().split()] klocki_start.add((x, y)) klocki_update = [] for _ in range(q): x, y = [int(x) for x in stdin.readline().split()] klocki_update.append((x, y)) stdout.write(str(brute(klocki_start)) + "\n") for i in range(q): new_k = klocki_update[i] if new_k in klocki_start: klocki_start.remove(new_k) else: klocki_start.add(klocki_update[i]) stdout.write(str(brute(klocki_start)) + "\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 | from sys import stdin, stdout def brute(klocki): count_start = len(klocki) to_remove = [] klocki_left = klocki.copy() for k in klocki: up = (k[0] - 1, k[1]) down = (k[0] + 1, k[1]) left = (k[0], k[1]-1) right = (k[0], k[1]+1) if (up not in klocki_left) and (down not in klocki_left): if left in klocki_left: to_remove.append(left) if right in klocki_left: to_remove.append(right) if k in klocki_left: klocki_left.remove(k) if (left not in klocki_left) and (right not in klocki_left): if up in klocki_left: to_remove.append(up) if down in klocki_left: to_remove.append(down) if k in klocki_left: klocki_left.remove(k) i = 0 while i < len(to_remove): k = to_remove[i] up = (k[0] - 1, k[1]) down = (k[0] + 1, k[1]) left = (k[0], k[1]-1) right = (k[0], k[1]+1) if (up not in klocki_left) and (down not in klocki_left): if left in klocki_left: to_remove.append(left) if right in klocki_left: to_remove.append(right) if k in klocki_left: klocki_left.remove(k) if (left not in klocki_left) and (right not in klocki_left): if up in klocki_left: to_remove.append(up) if down in klocki_left: to_remove.append(down) if k in klocki_left: klocki_left.remove(k) i += 1 return count_start - len(klocki_left) n, m, k, q = [int(x) for x in stdin.readline().split()] klocki_start = set() for _ in range(k): x, y = [int(x) for x in stdin.readline().split()] klocki_start.add((x, y)) klocki_update = [] for _ in range(q): x, y = [int(x) for x in stdin.readline().split()] klocki_update.append((x, y)) stdout.write(str(brute(klocki_start)) + "\n") for i in range(q): new_k = klocki_update[i] if new_k in klocki_start: klocki_start.remove(new_k) else: klocki_start.add(klocki_update[i]) stdout.write(str(brute(klocki_start)) + "\n") |