はまやんはまやんはまやん

hamayanhamayan's blog

競技プログラミングにおけるMo's Algorithm問題まとめ

Mo's Algorithm

  • pekempeyさんの最強解説
  • pekempeyさんの記事に乗っていることですが「要素が更新されない」「クエリの先読みが可能」「区間 [L,R] の結果から [L-1, R], [L+1, R], [L, R-1], [L, R+1] の結果が容易に得られる」という条件が大切
  • 計算量はO( (N+Q)√N) で、追加削除はO(1)かO(logN)が求められることが多い、答えを求める部分はO(sqrt(N))でも間に合う
  • Mo's Algorithmの上位互換があり、永続データ構造と組み合わせることで解ける問題が増える
  • この上位互換では範囲を増やすのは自由だけど、減らすのは難しい(Rollbackでしか出来ない)場合は上位互換を使う

実装例

第3回 ドワンゴからの挑戦状 本選 B. ニワンゴくんの約数

http://dwacon2017-honsen.contest.atcoder.jp/submissions/1227819
あまりに遅いダメコードだけど、Mo's Algorithm的にはあってる