algo — C++23 日本語リファレンス GitHub

RollbackMo

クラス · Mo’s algorithm (rollback)

struct RollbackMo;

概要

Mo’s algorithm (rollback)

構築・破棄

名前 説明 計算量
(constructor) 長さnの列に対するrollback Moを構築する $O(1)$

メンバ関数

名前 説明 計算量
input 標準入力からq個の区間を追加する $O(q)$
add 半開区間を追加する 償却 $O(1)$
solve (1) 左右共通の追加処理とロールバックで全クエリを実行する
(2) 左右別の追加処理とロールバックで全クエリを実行する
クエリ数を $q$ として、整列は $O(q\log q)$、 コールバック呼び出しは $O((n+q)\sqrt q)$ 回

メンバの詳細

input

void input(int q, int origin = 1, bool closed = false);

標準入力からq個の区間を追加する

solve

// (1)
template <class F, class G, class H, class I>
void solve(F add, G save, H load, I answer);

// (2)
template <class F, class G, class H, class I, class J>
void solve(F add_left, G add_right, H save, I load, J answer);

(1) 左右共通の追加処理とロールバックで全クエリを実行する

(2) 左右別の追加処理とロールバックで全クエリを実行する

参照