SegmentTreeOnTree
クラス · Segment Tree on Tree
template <monoid M>
struct SegmentTreeOnTree;
概要
Segment Tree on Tree
計算量
- 構築は $O(n)$、点更新は $O(\log n)$、経路積は $O(\log^2 n)$
構築・破棄
| 名前 | 説明 | 計算量 |
|---|---|---|
(constructor) |
(1) 空の構造を構築する (2) n頂点の空の木を構築する |
(1) $O(1)$ (2) $O(n)$ |
メンバ関数
| 名前 | 説明 | 計算量 |
|---|---|---|
add_edge |
無向辺u-vを追加する | 償却 $O(1)$ |
build |
(1) 根rとしてHL分解とsegment treeを構築する (2) 頂点値と辺値を設定して構築する |
$O(n)$ |
get_vertex |
頂点uの値を返す | $O(1)$ |
set_vertex |
頂点uの値を変更する | $O(\log n)$ |
set_edge |
edge_idの辺値を変更する | $O(\log n)$ |
prod |
uからvへの経路積を順序付きで返す | $O(\log^2 n)$ |
メンバの詳細
(constructor)
// (1)
SegmentTreeOnTree();
// (2)
explicit SegmentTreeOnTree(int _n);
(1) 空の構造を構築する
- 計算量: $O(1)$
(2) n頂点の空の木を構築する
- 計算量: $O(n)$
build
// (1)
void build(int r = 0);
// (2)
void build(const std::vector<T> &v_vals, const std::vector<T> &e_vals =;
(1) 根rとしてHL分解とsegment treeを構築する
- 計算量: $O(n)$
(2) 頂点値と辺値を設定して構築する
- 計算量: $O(n)$
prod
T prod(int u, int v, bool edge = false) const;
uからvへの経路積を順序付きで返す
- パラメータ
edge: trueなら頂点値を除き辺値だけを集約する - 計算量: $O(\log^2 n)$