📅  最后修改于: 2023-12-03 14:58:34.113000             🧑  作者: Mango
有一排 n 个门,所有门默认均为关着的状态。你需要进行 m 次操作,每次操作都给出两个正整数 a, b,表示你要将从第 a 个门到第 b 个门(含两端)的状态进行取反(即关着的门打开,开着的门关闭)。经过这 m 次操作后,你需要输出最终所有开着的门的编号。
5 2
1 2
2 4
3 5
本题可以使用差分的思想,对于每一个区间操作,可以将 a 和 b 两个位置上的数 +1/-1,进行差分处理后,遍历所有的门,统计状态为 1 的门的编号即可。
n, m = map(int, input().split())
diff = [0] * (n + 1)
for i in range(m):
a, b = map(int, input().split())
diff[a - 1] += 1
diff[b] -= 1
ans = []
x = 0
for i in range(n):
x += diff[i]
if x > 0:
ans.append(i + 1)
if len(ans) > 0:
print(" ".join(map(str, ans)))
else:
print("")