長さ $N$ の配列に対し、
を $O(\log N)$ で求めることが出来るデータ構造です。
var fw = initFenwickTree[T](n:int):fenwick_tree[T]
var fw = FenwickTreeType(T).init(n)
var fw = FenwickTree.getType(T).init(n)
制約
int / uint / ll / ull / modint
計算量
fw.add(p:int, x:T):void
a[p] += x
を行う
制約
計算量
fw.sum(l..<r):T
fw[l..<r]:T
a[l] + a[l + 1] + ... + a[r - 1]
を返す。
T
が整数型(int / uint / ll / ull
)の場合、答えがオーバーフローしたならば $\bmod 2^{\mathrm{bit}}$ で等しい値が返る。
Nimに特有の機能として[]演算子でも呼べる他、BackwardsIndexでのアクセスも可能です。例えば、fw[3..^1]
でインデックス3以降の全ての和が返されます。
制約
計算量