筆者はレート800前後の茶~緑コーダ
ABC当日にACできなかった問題を解いていく
ABCの問題を解いていく
実装コード
行ごとと列ごとにsetを作って管理すればいいみたい。
除去した後はsetも綺麗にしましょう(1敗)
main.py
from bisect import bisect_left, bisect_right, insort_left, insort_right
from collections import defaultdict, Counter, deque
from functools import reduce, lru_cache
from itertools import product, accumulate, groupby, combinations
import sys
import os
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
IS_LOCAL = int(os.getenv("ATCODER", "0"))==0
err = (lambda *args, **kwargs: print(*args, **kwargs, file=sys.stderr)) if IS_LOCAL else (lambda *args, **kwargs: None)
def main():
H, W, N = rLI()
A = defaultdict(set)
B = defaultdict(set)
C = [1] * N
for k in range(N):
i, j = rLI()
A[i].add(k)
B[j].add(k)
Q = rI()
for _ in range(Q):
q, r = rLI()
ans = 0
if q == 1:
for a in A[r]:
if C[a] > 0:
C[a] = 0
ans += 1
A[r].clear()
if q == 2:
for b in B[r]:
if C[b] > 0:
C[b] = 0
ans += 1
B[r].clear()
print(ans)
if __name__ == '__main__':
main()
感想
問題文の縦座標がx、横座標がyで表現しているのとてもいとをかしと思います。