Binary-Indexed-Tree(BIT)
(structure/others/binary-indexed-tree.hpp)
概要
Fenwick Tree とも呼ばれる. 数列に対し, ある要素に値を加える操作と, 区間和を求める操作をそれぞれ対数時間で行うことが出来るデータ構造. セグメント木や平衡二分探索
木の機能を制限したものであるが, 実装が非常に単純で定数倍も軽いなどの利点がある.
使い方
-
BinaryIndexedTree(sz)
: 長さ sz
の $0$ で初期化された配列で構築する.
-
BinaryIndexedTree(vs)
: 配列 vs
で構築する.
-
apply(k, x)
: 要素 k
に値 x
を加える.
-
prod(r)
: 区間 $[0,r)$ の総和を求める.
-
prod(l, r)
: 区間 $[l, r)$ の総和を求める.
-
lower_bound(x)
: 区間 $[0,k]$ の総和が x
以上となる最小の $k$ を返す. 数列が単調増加であることを要求する.
-
upper_bound(x)
: 区間 $[0,k]$ の総和が x
を上回る最小の $k$ を返す. 数列>が単調増加であることを要求する.
計算量
- 構築: $O(N)$
- クエリ: $O(\log N)$
Required by
Verified with
Code
Back to top page