Last updated:2018-04-16 03:25:49
Category:データ構造, Tag: セグメント木


概要


$N$ 個の数の列について,次のクエリを処理する:

計算量


使い方


コンストラクタには,長さ,演算の単位元,演算のラムダ式を指定します.

// 長さnの区間minを取るセグ木を初期化
SegmentTree<int> st(n, (1LL<<31)-1, [](T& l, T& r) {return (l < r) ? l : r; });


ただ記述量が多いため,最小値,最大値,合計のエイリアスを用意しています.

SegmentTree<int> st(n, MIN); // 区間最小値
SegmentTree<int> st(n, MAX); // 区間最大値
SegmentTree<int> st(n, SUM); // 区間合計

// i番目の要素を配列a[i]の値とする
for(int i = 0; i < n; ++i) st.update(i, a[i]);

// 2番目の要素をに10を加える
st.add(2, 10);

// 区間[l, r)の最小値を取得する
int l = 1, r = 5;
int mi = st.query(l, r);

実装例


問題例


参考文献