結果
| 問題 |
No.2592 おでぶなおばけさん 2
|
| コンテスト | |
| ユーザー |
rlangevin
|
| 提出日時 | 2023-12-20 22:38:46 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,566 bytes |
| コンパイル時間 | 264 ms |
| コンパイル使用メモリ | 82,428 KB |
| 実行使用メモリ | 109,888 KB |
| 最終ジャッジ日時 | 2024-09-27 10:09:28 |
| 合計ジャッジ時間 | 87,906 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 80 WA * 3 |
ソースコード
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()))
mod1 = 10 ** 9 + 9
mod2 = 10 ** 9 + 7
mod3 = 998244353
p1 = [1] * (N + 1)
p2 = [1] * (N + 1)
p3 = [1] * (N + 1)
for i in range(N):
p1[i + 1] = p1[i] * K % mod1
p2[i + 1] = p2[i] * K % mod2
p3[i + 1] = p3[i] * K % mod3
def op1(x, y):
a = (x[0] + y[0] * p1[x[1]]) % mod1
b = x[1] + y[1]
return (a, b)
def op2(x, y):
a = (x[0] + y[0] * p2[x[1]]) % mod2
b = x[1] + y[1]
return (a, b)
def op3(x, y):
a = (x[0] + y[0] * p3[x[1]]) % mod3
b = x[1] + y[1]
return (a, b)
T1 = SegmentTree(N, (0, 0), op1)
T2 = SegmentTree(N, (0, 0), op2)
T3 = SegmentTree(N, (0, 0), op3)
for i in range(N):
T1.update(i, (A[i]%mod1, 1))
T2.update(i, (A[i]%mod2, 1))
T3.update(i, (A[i]%mod3, 1))
for i in range(Q):
l, r = map(int, input().split())
l -= 1
if T1.fold(l, r)[0] and T2.fold(l, r)[0] and T3.fold(l, r)[0]:
print("Yes")
else:
print("No")
rlangevin