考え方
2進数で30桁に制限されている.bitの桁ごとに演算すれば良い.また,
- 1〜iまでの操作の合成 (※1)
- 1〜iまでの操作の合成を値に作用させた結果
※1:bitの桁ごとに計算して,桁の計算後が終われば捨てることにすれば,1次元配列で済む.
回答例
解説(Editorial - AtCoder Beginner Contest 261)をPythonに焼き直し.bitの桁ごとに考えるためには,bitのループの中でクエリのループを回せばよい.
N, C = map(int, input().split()) TA = [list(map(int, input().split())) for _ in range(N)] ans = [0] * N for i in range(30): cur = C >> i & 1 f = [0, 1] for j, (T, A) in enumerate(TA): a = A >> i & 1 if T == 1: f = [f[0] & a, f[1] & a] elif T == 2: f = [f[0] | a, f[1] | a] else: f = [f[0] ^ a, f[1] ^ a] cur = f[cur] ans[j] |= cur << i print(*ans, sep = '\n')