長さNの静的な値の列が与えられた時に、前処理O(NlogN)で、その列の上の区間に対する演算がO(1)で計算できるようになるデータ構造

使える演算は具体的にはminなど、argminもOK

構築O(N log N)

  • 各点から2ベキの長さの区間のminを計算
  • 2^kの長さの区間は半分の長さの区間2つから定数オーダーで計算可能なので小さい方からDPする

クエリー

  • クエリー区間の長さより小さい最大の長さの計算済み区間を2つ使ってクエリ区間を覆う
  • 例えば1〜7の区間に対して1〜4と4〜7で覆う
  • クエリ区間の最小値は2つのどちらかの区間での最小値

列が更新される時はセグメント木を使う

木の最小共通祖先オイラーツアー+Range Minimum Queryで求める場合に。

スパーステーブル(Sparse-Table) | Luzhiled’s memo

2次元に拡張できる

スパーステーブル