結果
問題 |
No.1891 Static Xor Range Composite Query
|
ユーザー |
![]() |
提出日時 | 2025-06-12 20:21:47 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,261 bytes |
コンパイル時間 | 186 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 200,912 KB |
最終ジャッジ日時 | 2025-06-12 20:22:03 |
合計ジャッジ時間 | 9,342 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 20 TLE * 1 -- * 9 |
ソースコード
MOD = 998244353 def main(): import sys sys.setrecursionlimit(1 << 25) input = sys.stdin.read data = input().split() ptr = 0 N = int(data[ptr]) ptr +=1 Q = int(data[ptr]) ptr +=1 a = [] b = [] for _ in range(N): ai = int(data[ptr]) ptr +=1 bi = int(data[ptr]) ptr +=1 a.append(ai % MOD) b.append(bi % MOD) class SegmentTree: def __init__(self, a, b): self.n = len(a) self.size = 1 while self.size < self.n: self.size <<=1 self.tree_a = [1] * (2 * self.size) self.tree_b = [0] * (2 * self.size) for i in range(self.n): self.tree_a[self.size + i] = a[i] self.tree_b[self.size + i] = b[i] for i in range(self.size -1, 0, -1): self.tree_a[i] = (self.tree_a[2*i] * self.tree_a[2*i+1]) % MOD self.tree_b[i] = (self.tree_b[2*i] * self.tree_a[2*i+1] + self.tree_b[2*i+1]) % MOD def query_a_b(self, l, r): res_a = 1 res_b = 0 l += self.size r += self.size while l < r: if l % 2 ==1: res_a = (res_a * self.tree_a[l]) % MOD res_b = (res_b * self.tree_a[l] + self.tree_b[l]) % MOD l +=1 if r % 2 ==1: r -=1 res_a = (res_a * self.tree_a[r]) % MOD res_b = (res_b * self.tree_a[r] + self.tree_b[r]) % MOD l >>=1 r >>=1 return res_a, res_b st = SegmentTree(a, b) results = [] for _ in range(Q): l = int(data[ptr]) ptr +=1 r = int(data[ptr]) ptr +=1 p = int(data[ptr]) ptr +=1 x = int(data[ptr]) ptr +=1 if l >= r: results.append(x % MOD) continue m = 0 current_x = x % MOD for k in range(l, r): idx = k ^ p current_x = (a[idx] * current_x + b[idx]) % MOD results.append(current_x % MOD) for res in results: print(res) if __name__ == '__main__': main()