Mo's algorithm の区間の幅と計算
区間の個数をQ個やN個にするパターンがあって分からなかったから調べた。
備忘録として書いた。
上の画像のように縦に区切る幅をWと設定すると計算量は以下のように求まる
数列の長さをN、クエリの個数をQとすると
- ↓↑の移動回数・・・WQ
- →の移動回数・・・WN2
よって合計WN2+WQ
これを最小にするWを求めれば良い。
相加相乗平均の関係より
WN2+WQ≧2N2Q
等号成立は
WN2=WQW=QN
となる。よって区間の個数はQ個が最適となる。
定数倍を考慮した場合
定数倍を考慮するとW=2Q3Nとなるなしい
参考: https://nyaannyaan.github.io/library/misc/mo.hpp.html