思路:hash表 + 模拟。直接根据题意进行模拟即可,当对手加入牌的时候,就把
和
加入到hash表中,注意需要判断下牌的范围是否在
到
之间;同理,当对手拿走牌的时候,就分别把
和
从hash表中减去一次,也是需要判断下牌的范围是否在
到
之间,如果牌减完了就直接从hash表中删掉。最终,hash表的长度就是每一次操作后的答案,添加到out数组中,然后整体输出即可
代码:
import sys
from collections import defaultdict
input = lambda: sys.stdin.readline().strip()
import math
inf = 10 ** 18
def I():
return input()
def II():
return int(input())
def MII():
return map(int, input().split())
def LI():
return input().split()
def LII():
return list(map(int, input().split()))
def LFI():
return list(map(float, input().split()))
fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
isqrt = lambda x: int(math.sqrt(x))
'''
'''
def solve():
m, q = MII()
out = []
d = defaultdict(int)
for _ in range(q):
op, x = MII()
if op == 1:
if x - 3 >= 1:
d[x - 3] += 1
if x + 3 <= m:
d[x + 3] += 1
else:
if x - 3 >= 1:
d[x - 3] -= 1
if d[x - 3] == 0:
del d[x - 3]
if x + 3 <= m:
d[x + 3] -= 1
if d[x + 3] == 0:
del d[x + 3]
out.append(str(len(d)))
print('\n'.join(out))
t = 1
# t = II()
for _ in range(t):
solve()

京公网安备 11010502036488号