-
Notifications
You must be signed in to change notification settings - Fork 8
fenwicktree
shakayami edited this page Mar 23, 2022
·
2 revisions
数列(a_i)(i=0,...,n-1)に対して以下のクエリを高速に行えます。
- a_iをxに更新する
- kに対して、a_0+...+a_{k-1}を求める
FT=fenwick_tree(N)Nは配列のサイズです。 初期化した時、最初の配列のサイズは全て0になっています。 【注意】もしバグったら、まずは初期値を間違えてないか確認しましょう。
FT.add(i,a)i番目の値をaに更新します
print(FT.sum0(r))a_0+...+a_{r-1}の総和、つまりsum(a[:r])を求めます。
print(FT.sum(l,r))a_l+...+a_{r-1}の総和、つまりsum(a[l:r])を求めます。
(https://atcoder.jp/contests/practice2/tasks/practice2_b)
class fenwick_tree():
#(中略)
N,Q=map(int,input().split())
a=[int(i) for i in input().split()]
FT=fenwick_tree(N)
for i in range(N):
FT.add(i,a[i])
#ここまで初期化
#ここからクエリに答える
for i in range(Q):
t,a,b=map(int,input().split())
if t==0:
FT.add(a,b)
else:
print(FT.sum(a,b))