提出 #69756718
ソースコード 拡げる
"""
<方針>
- `A` の先頭を本当にぐるぐる移動 させてたら時間が足りない `O(NQ)`
- `A` を環状で考えてあげて(マージンをとって2倍にしておく)、先頭の移動は、`head` で管理させてあげれば良さそう。
- とはいえ、`[l, r)` を毎回計算していたら、これもまた `O(NQ)` になってしまう(一敗)。
- そこは累積和 `B` を用いて、あらかじめ計算しておき(`O(N)`)、`[0, r) - [0, l-1)` としてクエリ毎に計算(`O(Q)`)すれば良い。
- 全体として、`O(N+Q)` となった。
"""
N, Q = map(int, input().split())
A = list(map(int, input().split()))
# マージンをとって2倍
A = A[:] + A[:]
# 累積和を計算する。
B = [0]
for i in range(2*N):
B.append(B[-1]+A[i])
# 先頭を管理する変数
head = 0
# クエリ毎の処理
for _ in range(Q):
query = list(map(int, input().split()))
match query:
# 1, c のとき、
case [1, c]:
# 先頭を動かす
head += c
# 2*Nのサイズに収まるようにしておく
head %= N
# 2, l, r のとき、
case [2, l, r]:
# [0, r) - [0, l-1) を計算する。
print(B[head+r] - B[head+l-1])
提出情報
| 提出日時 | |
|---|---|
| 問題 | C - Rotate and Sum Query |
| ユーザ | mattsunkun |
| 言語 | Python (PyPy 3.10-v7.3.12) |
| 得点 | 350 |
| コード長 | 1269 Byte |
| 結果 | AC |
| 実行時間 | 453 ms |
| メモリ | 152664 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 350 / 350 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 55 ms | 76244 KiB |
| 00_sample_01.txt | AC | 55 ms | 76604 KiB |
| 01_random_00.txt | AC | 55 ms | 76416 KiB |
| 01_random_01.txt | AC | 281 ms | 84604 KiB |
| 01_random_02.txt | AC | 271 ms | 124940 KiB |
| 01_random_03.txt | AC | 157 ms | 151860 KiB |
| 01_random_04.txt | AC | 292 ms | 85160 KiB |
| 01_random_05.txt | AC | 346 ms | 151828 KiB |
| 01_random_06.txt | AC | 290 ms | 84388 KiB |
| 01_random_07.txt | AC | 344 ms | 151732 KiB |
| 01_random_08.txt | AC | 318 ms | 125208 KiB |
| 01_random_09.txt | AC | 331 ms | 151720 KiB |
| 01_random_10.txt | AC | 317 ms | 120056 KiB |
| 01_random_11.txt | AC | 335 ms | 151560 KiB |
| 01_random_12.txt | AC | 174 ms | 152000 KiB |
| 01_random_13.txt | AC | 169 ms | 151504 KiB |
| 01_random_14.txt | AC | 453 ms | 152288 KiB |
| 01_random_15.txt | AC | 453 ms | 151912 KiB |
| 01_random_16.txt | AC | 418 ms | 151788 KiB |
| 01_random_17.txt | AC | 250 ms | 151576 KiB |
| 01_random_18.txt | AC | 422 ms | 152452 KiB |
| 01_random_19.txt | AC | 318 ms | 152664 KiB |