結果
| 問題 |
No.2592 おでぶなおばけさん 2
|
| コンテスト | |
| ユーザー |
rlangevin
|
| 提出日時 | 2023-12-20 22:34:49 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,051 bytes |
| コンパイル時間 | 239 ms |
| コンパイル使用メモリ | 82,568 KB |
| 実行使用メモリ | 95,616 KB |
| 最終ジャッジ日時 | 2024-09-27 10:07:39 |
| 合計ジャッジ時間 | 46,977 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 82 WA * 1 |
ソースコード
class SegmentTree:
def __init__(self,
n,
identity_e,
combine_f,
):
self._n = n
self._size = 1
while self._size < self._n:
self._size <<= 1
self._identity_e = identity_e
self._combine_f = combine_f
self._node = [self._identity_e] * (2 * self._size)
def build(self, array):
assert len(array) == self._n
for index, value in enumerate(array, start=self._size):
self._node[index] = value
for index in range(self._size - 1, 0, -1):
self._node[index] = self._combine_f(
self._node[index << 1 | 0],
self._node[index << 1 | 1]
)
def update(self, index, value):
i = self._size + index
self._node[i] = value
while i > 1:
i >>= 1
self._node[i] = self._combine_f(
self._node[i << 1 | 0],
self._node[i << 1 | 1]
)
def fold(self, L, R):
L += self._size
R += self._size
value_L = self._identity_e
value_R = self._identity_e
while L < R:
if L & 1:
value_L = self._combine_f(value_L, self._node[L])
L += 1
if R & 1:
R -= 1
value_R = self._combine_f(self._node[R], value_R)
L >>= 1
R >>= 1
return self._combine_f(value_L, value_R)
N, Q, K = map(int, input().split())
A = list(map(int, input().split()))
mod = 10 ** 9 + 9
p = [1] * (N + 1)
for i in range(N):
p[i + 1] = p[i] * K % mod
def op(x, y):
a = (x[0] + y[0] * p[x[1]]) % mod
b = x[1] + y[1]
return (a, b)
T = SegmentTree(N, (0, 0), op)
for i in range(N):
T.update(i, (A[i]%mod, 1))
for i in range(Q):
l, r = map(int, input().split())
l -= 1
if T.fold(l, r)[0]:
print("Yes")
else:
print("No")
rlangevin