競技プログラミング用のライブラリ(C++14)
使い方などは https://ei1333.github.io/luzhiled/ を参照してください(更新をサボっているため最新ではないです)
- Segment-Tree
- 双対Segment-Tree
- 遅延伝搬Segment-Tree
- 二次元Segment-Tree(一点更新矩形取得)
- 二次元Segment-Tree(矩形更新一点取得)
- 永続Segment-Tree
- Segment-Tree-Beats
- Binary-Indexed-Tree
- Sparse-Table
- Disjoint-Sparse-Table
- 永続配列
- 列の平方分割
- 長方形の和集合の面積
- スライド区間の昇順k個の和
- Sliding-Window-Aggregation
- 0-1ナップサック O(NW)
- 0-1ナップサック O(N sum(v_i))
- 個数制限なしナップサック O(NW)
- 個数制限付きナップサック O(NW)
- 個数制限付きナップサック O(N^2 max(v_i)^2)
- Divide-And-Conquer-Optimization
- 最適二分探索木
- ヒストグラム中の最大長方形
- 最長増加部分列(LIS)
- 編集距離
- Monotone-Minima
- オンラインオフライン変換
- スライド最小値
- 複数文字列検索(Aho-Corasick)
- 接尾辞配列(Suffix-Array)
- 高さ配列(LCP-Array)
- 最長回文(Manacher)
- 最長共通接頭辞(Z-Algorithm)
- ローリングハッシュ
- 最大流(Ford-Fulkerson) O(FE)
- 最大流(Dinic) O(EV^2)
- 最大流(Dinic) 容量スケーリング O(EV logU)
- 最大流(Push-Relabel) O(V^2 sqrt(E))
- 最小流量制限付き最大流, 循環流
- 最小費用流(Primal-Dual) O(FE logV)
- 二部グラフの最大マッチング O(EV)
- 二部グラフの最大マッチング(HopCroft-Karp) O(E sqrt(V))
- 二部グラフの最小重み最大マッチング(Hungarian) O(V^3)
- 一般グラフの最大マッチング(GabowEdmonds) O(VE logV)
- グリッド上の幅優先探索 O(HW)
- 単一始点最短路(Bellman-Ford) O(VE)
- 単一始点最短路(SPFA) O(VE)
- 単一始点最短路(Dijkstra) O((E + V) logV)
- 単一始点最短路(Dijkstra with Fibonacch-Heap) O(V logV + E)
- 単一始点最短路(Dijkstra with Radix-Heap) O((E + V) logU)
- 全点対間最短路(Warshall-Floyd) O(V^3)
- オイラー路の復元
- 彩色数 O(2^V V)
- 最小全域有向木(Chu-Liu/Edmond) O(E logV)
- 橋/関節点
- 最大クリーク O(2^sqrt(2E) V)
- 最大独立集合(乱択)
- トポロジカルソート
- DAGの到達可能性クエリ(オフライン) O((V+E)Q/64)
- Dominator-Tree
- オイラーのφ関数(値) O(sqrt(N))
- オイラーのφ関数(テーブル) O(N loglogN)
- メビウスのμ関数(テーブル) O(N loglogN)
- 商の列挙
- 拡張ユークリッドの互除法 O(logN)
- 約数列挙 O(sqrt(N)
- 素因数分解 O(sqrt(N))
- 素数判定 (確率的素数判定) / 素因数分解 (Pollard-Rho)
- 進数変換
- ModInt
- 任意ModInt
- 組合せ
- 累乗 O(logN)
- Mod-Sqrt
- ベル数(値) O(min(N,K) logN)
- ラグランジュ補間
- 二項係数(値) O(K)
- 二項係数(テーブル) O(N^2)
- 第2種スターリング数 O(K logN)
- 階乗 mod p O(sqrt(p) log p)
- 離散対数問題 O(sqrt(p))
- モンモール数 O(N)