結果
| 問題 |
No.1891 Static Xor Range Composite Query
|
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 15:13:36 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,239 bytes |
| コンパイル時間 | 214 ms |
| コンパイル使用メモリ | 82,512 KB |
| 実行使用メモリ | 217,124 KB |
| 最終ジャッジ日時 | 2025-06-12 15:13:57 |
| 合計ジャッジ時間 | 11,667 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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()
gew1fw