結果
| 問題 |
No.1891 Static Xor Range Composite Query
|
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 15:14:12 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,356 bytes |
| コンパイル時間 | 229 ms |
| コンパイル使用メモリ | 82,688 KB |
| 実行使用メモリ | 67,200 KB |
| 最終ジャッジ日時 | 2025-06-12 15:14:25 |
| 合計ジャッジ時間 | 9,090 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 20 TLE * 1 -- * 9 |
ソースコード
MOD = 998244353
def main():
import sys
input = sys.stdin.read().split()
ptr = 0
N = int(input[ptr])
ptr += 1
Q = int(input[ptr])
ptr += 1
a = []
b = []
for _ in range(N):
ai = int(input[ptr])
ptr += 1
bi = int(input[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.a = [1] * (2 * self.size)
self.b = [0] * (2 * self.size)
for i in range(self.n):
self.a[self.size + i] = a[i]
self.b[self.size + i] = b[i]
for i in range(self.size - 1, 0, -1):
self.push_up(i)
def push_up(self, i):
left = 2 * i
right = 2 * i + 1
self.a[i] = (self.a[left] * self.a[right]) % MOD
self.b[i] = (self.a[right] * self.b[left] + self.b[right]) % MOD
def query(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.a[l]) % MOD
res_b = (res_a * self.b[l] + res_b) % MOD
l += 1
if r % 2 == 1:
r -= 1
res_a = (res_a * self.a[r]) % MOD
res_b = (self.a[r] * res_b + res_a * self.b[r]) % MOD
l >>= 1
r >>= 1
return (res_a, res_b)
st = SegmentTree(a, b)
for _ in range(Q):
l = int(input[ptr])
ptr += 1
r = int(input[ptr])
ptr += 1
p = int(input[ptr])
ptr += 1
x = int(input[ptr])
ptr += 1
left = l
right = r - 1
if left > right:
print(x % MOD)
continue
res_a = 1
res_b = 0
i = left
while i <= right:
idx = (i ^ p)
ai = a[idx]
bi = b[idx]
res_a = (res_a * ai) % MOD
res_b = (ai * res_b + bi) % MOD
i += 1
res = (res_a * x + res_b) % MOD
print(res)
if __name__ == "__main__":
main()
gew1fw