Skip to content

Commit

Permalink
update segtree_lazy.md (usage)
Browse files Browse the repository at this point in the history
  • Loading branch information
idat50me committed May 10, 2024
1 parent 53e42e2 commit 4e9e072
Showing 1 changed file with 17 additions and 21 deletions.
38 changes: 17 additions & 21 deletions tree/docs/segtree_lazy.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,24 +31,20 @@ $n \leq 10^8$ 程度.
- `get(idx)`:$O(\log n)$
- `get(L, R)`:$O(\log n)$

## 具体例
- RmQ
```cpp
auto op = [](T l, T r) { return min(l, r); };
T ex = MAX;
```

- RUQ
```cpp
auto f_upd = [](T x, M m) { return m; };
auto f_lz = [](M l, M r) { return r; };
/* 入力されないことが保証される値,または pair<integer, bool> で保持している状態で bool = true としておく等 */
M em = -1;
```

- RAQ
```cpp
auto f_upd = [](T x, M m) { return x+m; };
auto f_lz = [](M l, M r) { return l+r; };
M em = 0;
```
## 気を付けるべき使用例
#### Range Matrix Multiplication
ある行列Aに行列Bを掛ける操作をすることは,Bを左から掛けることに相当する.


```cpp
using mat = matrix<T>;

auto op = /* 任意の範囲取得クエリ */;
mat ex = /* opの単位元 */;

/* ある行列Aに行列Bを掛ける操作をすることは、Bを左から掛けることに相当する */
auto f_upd = [](mat A, mat B) { return B * A; };
mat em = mat::Indentity();

auto seg = segtree_lazy(v /* or N */, op, f_upd, f_upd, ex, em);
```

0 comments on commit 4e9e072

Please sign in to comment.