初めに
いすも法と尺取り法は別記事でやります
累積和とは
簡単に言えば、最初に下準備してその後の質問に爆速で答えるものです
例えば、、、
1 2 3 4 5 6 7 8 9
ていう配列があるとする(最初は0番目と考える)
0番目から2番目まで全て足すと?
6だよね
じゃあ0番目から5番目は?
21だよね
でもいちいち足すのめんどくさいよね
ここで累積和を使う
1 3 6 10 15 21 28 36 45
↑0番目から足したやつ
これ見たら答えるの速くなる
実装
1 2 3 4 5 6 7 8 9
↓ 最初を足す
0 0 0 0 0 0 0 0 0 ←数ぶん作る
1 2 3 4 5 6 7 8 9
↓ 足す
1 0 0 0 0 0 0 0 0
↑ 前の足す
プログラミング

この問題をやる
N = int(input())
A = list(map(int, input().split()))
# 累積和を求める
# acc[k]: 左から k 個分の総和
acc = [0] * (N+1)
for idx, a in enumerate(A):
acc[idx+1] = acc[idx] + a
# 質問に答える
Q = int(input())
for _ in range(Q):
k = int(input())
print(acc[k])
こんな感じ
最後に
累積和は、まだ簡単にできるので極めれば強い
がんばれ!!

コメント