結果
問題 |
No.1891 Static Xor Range Composite Query
|
ユーザー |
![]() |
提出日時 | 2025-06-12 20:20:14 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,239 bytes |
コンパイル時間 | 1,051 ms |
コンパイル使用メモリ | 82,688 KB |
実行使用メモリ | 69,376 KB |
最終ジャッジ日時 | 2025-06-12 20:20:38 |
合計ジャッジ時間 | 9,851 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 20 TLE * 1 -- * 9 |
ソースコード
MOD = 998244353 def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]) idx +=1 Q = int(data[idx]) idx +=1 a = [] b = [] for _ in range(N): ai = int(data[idx]) idx +=1 bi = int(data[idx]) idx +=1 a.append(ai) b.append(bi) queries = [] for _ in range(Q): l = int(data[idx]) idx +=1 r = int(data[idx]) idx +=1 p = int(data[idx]) idx +=1 x = int(data[idx]) idx +=1 queries.append( (l, r, p, x) ) size = 1 while size < N: size <<=1 tree = [ (1,0) for _ in range(2*size) ] for i in range(N): ai = a[i] bi = b[i] tree[size + i] = (ai % MOD, bi % MOD) for i in range(size-1, 0, -1): a_left, b_left = tree[2*i] a_right, b_right = tree[2*i +1] a_total = (a_right * a_left) % MOD b_total = (a_right * b_left + b_right) % MOD tree[i] = (a_total, b_total) def query(l, r): res_a = 1 res_b = 0 l += size r += size while l < r: if l % 2 ==1: a_tmp, b_tmp = tree[l] res_a = (res_a * a_tmp) % MOD res_b = (res_a * res_b + res_b * a_tmp + b_tmp) % MOD res_b = (res_a * res_b + b_tmp) % MOD l +=1 if r %2 ==1: r -=1 a_tmp, b_tmp = tree[r] res_a = (res_a * a_tmp) % MOD res_b = (res_a * res_b + b_tmp) % MOD l >>=1 r >>=1 return (res_a, res_b) for l, r, p, x in queries: if l >= r: print(x % MOD) continue res_a = 1 res_b = 0 current_a = 1 current_b = 0 for k in range(l, r): i = k ^ p if i >= N: continue ai = a[i] bi = b[i] current_a = (ai * current_a) % MOD current_b = (ai * current_b + bi) % MOD res = (current_a * x + current_b) % MOD print(res) if __name__ == '__main__': main()