提出 #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
結果
AC × 2
AC × 22
セット名 テストケース
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