NISHIO Hirokazu
[Translate]
Disjoint Sparse Table
長さNの静的な値の列が与えられた時に、前処理O(NlogN)で、その列の上の区間に対する演算がO(1)で計算できるようになるデータ構造
演算に要求される条件
結合則
:
(a * b) * c = a * (b * c)
単位元や逆元は必要ない
加算のような逆元のある演算についてはこれを使う必要はない
累積和
を使って構築O(N)で同じことができるから
逆元のない乗算などで
左右から累積積
で
一つ除き積
を実現できる
これをたくさんの累積積を組み合わせて任意の区間の積を計算できるようにしたのがDisjoint Sparse Table
Disjoint Sparse Table と セグ木に関するポエム - noshi91のメモ
Sparse Table
Tweet
Related Pages
PAST2L
Sparse Table
左右から累積積
累積和
一つ除き積
→
数え上げ
×
degwer
×
状態をまとめる
×
dpは全探索の高速化
×
arc059f
×
codefestival_2016_final_f
×
aoj2439
×
探索順の変更
×
大きい順に並べる
×
aoj2333
×
順列は挿入dp
×
bit_dp
×
区間は終点でソート
×
条件の言い換え
×
操作は多いが産物は少ない
×
agc013d
×
線形和への分解
×
演算順序の変更
×
ビット演算を桁ごとに分解
×
部分群
×
操作が可逆で全域→部分群
×
ラグランジュの定理
×
再帰的定義→dp
×
arc037d
×
桁dp
×
aoj0570
×
累積和
×
フェニック木
×
高速フーリエ変換
×
ntt
×
高速ゼータ変換
×
and_と_add_の畳み込み
×
二分累乗
×
agc013e
×
行列木定理
×
全域木の個数
×
lgv公式
×
非交叉経路の個数
×
小さい確率を無視する
×
二項係数の公式
×
経路数
×
45度回転
×
xとyにわける
×
カタラン数
×
包除原理
×
agc005d
×
約数系包除
×
arc064f
→
数え上げテクニック集
→
abc181
×
区間が交わらないとしてよい
×
左右から累積積
→
ABC181E
→
range_add_point_read
×
セグメント木
×
abc188
×
累積和
×
増分リスト
×
range_add
→
RangeAddは二つのPointAdd
→
帰着する力
×
小さい制約の問題
×
nが8前後の制約
×
nが10~20前後の制約
×
n_が_30~40前後の制約
×
n_が_50前後の制約
×
n_が_300~500前後の制約
×
n_が_1000_前後の制約
×
小さな定数に注目
×
変数を一つ固定する
×
3つのものの真ん中を固定
×
行列の半分
×
xとyにわける
×
操作の不変量に注目
×
偶奇に注目
×
偶奇で場合わけ
×
操作の順番によらない
×
時間軸反転
×
元に戻せる操作
×
左右から累積積
×
等差数列の加算は差に注目
×
区間反転の合成はxor
×
grundy数
×
余事象を引く
×
k番目の数を二分探索
×
xorは繰り上がりのない足し算
×
xorは桁ごとに分割可能
×
45度回転
×
差の最小化は中央値
×
代表的なグラフで考察
×
木は二部グラフ
×
木の直径
×
最大化を二分探索で
×
選択肢が少ない方から貪欲
×
二次元座標を二部グラフにする
×
順序を有向グラフにする
×
凸関数の極値は三分探索
×
単調増加ならしゃくとり法
×
等比数列は剰余に注目
×
n進数は剰余に注目
×
括弧列は上り下り
×
競技プログラミングで解法を思いつくための典型的な考え方
×
keyence2020_d
×
abc152_f
×
agc026_c
×
arc060_a
×
joi2008ho_c
×
abc034d
×
abc138e
×
abc023d
→
競技プログラミングで解法を思いつくための典型的な考え方
→
アルゴリズム
×
蟻本
×
区間スケジューリング
×
二分探索木
×
unionfind
×
最短路問題
×
最小全域木
×
ユークリッドの互除法
×
ニ分探索
×
しゃくとり法
×
半分全列挙
×
座標圧縮
×
セグメント木
×
binary_lndexed_tree
×
バケット法
×
平方分割
×
ビットdp
×
bitdp
×
行列累乗
×
繰り返し二乗法
×
最大流
×
最小カット
×
二部マッチング
×
一般マッチング
×
マッチング
×
辺カバー
×
安定集合
×
点カバー
×
最小費用流
×
凸包
×
grundy数
×
強連結成分分解
×
2-sat
×
lca
×
ダブリング
×
接尾辞配列
×
Sparse Table
×
rmq
×
atcoder
→
プログラミングコンテストチャレンジブック
→
モノイド
×
結合則
×
単位元
×
セグメント木
×
範囲縮約
×
範囲作用
×
半分遅延セグメント木
×
双対セグメント木
×
acl_beginner_contest
×
遅延セグメント木
×
遅延伝播segment木
→
遅延伝搬セグメント木
→
半群
×
associative_law
×
結合律
×
結合則
→
結合法則
→
頻度表
×
累積和
×
二次元配列の累積和
→
AGC047A
→
累積和
×
動的計画法
×
ABC179D
×
abc179
→
累積和しながらDP
→
abc177
×
分配法則
×
行列の半分
×
積と和の交換
×
累積和
×
長整数が速い
→
ABC177C
→
累積和
×
atcoder
×
range_add
→
いもす法
→
累積和
×
xとyにわける
→
ABC182
→
累積和
×
単調増加
×
単調非減少
×
単調現象
→
正の数の累積和は単調増加
→
累積和
×
二次元累積話
→
abc106_d
→
mod_pでの逆元
×
一つ除き積
×
左右から累積積
×
高速素因数分解
→
abc152e
→
累積和
×
いもす法
×
セグメント木
×
abc179
→
ABC179D
→
逆写像テーブル
×
累積和
×
abc089
→
ABC089D
→
区間
×
累積和
×
Static Range Sum
→
任意の区間は0からの区間の差
→
一つ除き積
×
左右から累積積
→
ABC125C
→
累積和
×
各停・急行・特急
→
簡潔ビットベクトル
→
順序のない列は多重集合
×
並び替え→頻度カウント
×
頻度カウントは範囲和
×
累積和
×
二者間の関係からより大きな構造ができる
×
重なるなら同じ長さ→偶数長のブロック
×
帰着する力
→
ARC104
→
頻度カウント
×
範囲和
×
累積和
→
頻度カウントは範囲和
→
累積和
→
DP M
→
累積和
×
bisect
→
abc130_d
→
木dp
×
逆元
×
単位元
×
結合則
×
左右から累積積
×
動的計画法
→
全方位木DP
→
dp_l
×
累積和
→
DP N
→
itertools.accumulate
×
itertools
×
累積和
×
atcoder
→
Static Range Sum
"
Engineer's way of creating knowledge
" the English version of my book is now available on
[Engineer's way of creating knowledge]
(C)NISHIO Hirokazu / Converted from
[Scrapbox]
at
11/23/2025, 5:16:45 PM
[Edit]