Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
HCPC: 北海道大学競技プログラミングサークル
PDF, PPTX
4,031 views
Convex Hull Trick
HCPC 勉強会 (2019/4/4) - Convex Hull Trick ※文字が見えない場合は、ダウンロードするかフルスクリーンにしてご覧ください
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 48
2
/ 48
3
/ 48
4
/ 48
5
/ 48
6
/ 48
7
/ 48
8
/ 48
9
/ 48
10
/ 48
Most read
11
/ 48
12
/ 48
13
/ 48
Most read
14
/ 48
15
/ 48
16
/ 48
17
/ 48
18
/ 48
19
/ 48
20
/ 48
21
/ 48
22
/ 48
23
/ 48
24
/ 48
25
/ 48
26
/ 48
27
/ 48
28
/ 48
29
/ 48
30
/ 48
31
/ 48
32
/ 48
33
/ 48
34
/ 48
35
/ 48
36
/ 48
37
/ 48
Most read
38
/ 48
39
/ 48
40
/ 48
41
/ 48
42
/ 48
43
/ 48
44
/ 48
45
/ 48
46
/ 48
47
/ 48
48
/ 48
More Related Content
PDF
ウェーブレット木の世界
by
Preferred Networks
PDF
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
PDF
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
PDF
最小カットを使って「燃やす埋める問題」を解く
by
shindannin
PDF
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
by
Kensuke Otsuki
PDF
双対性
by
Yoichi Iwata
PDF
Rolling hash
by
HCPC: 北海道大学競技プログラミングサークル
PDF
AtCoder Regular Contest 033 解説
by
AtCoder Inc.
ウェーブレット木の世界
by
Preferred Networks
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
最小カットを使って「燃やす埋める問題」を解く
by
shindannin
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
by
Kensuke Otsuki
双対性
by
Yoichi Iwata
Rolling hash
by
HCPC: 北海道大学競技プログラミングサークル
AtCoder Regular Contest 033 解説
by
AtCoder Inc.
What's hot
PDF
様々な全域木問題
by
tmaehara
PDF
Rolling Hashを殺す話
by
Nagisa Eto
PDF
Binary indexed tree
by
HCPC: 北海道大学競技プログラミングサークル
PDF
AtCoder Regular Contest 030 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 015 解説
by
AtCoder Inc.
PDF
グラフネットワーク〜フロー&カット〜
by
HCPC: 北海道大学競技プログラミングサークル
PDF
指数時間アルゴリズム入門
by
Yoichi Iwata
PDF
Re永続データ構造が分からない人のためのスライド
by
Masaki Hara
PDF
文字列アルゴリズム
by
HCPC: 北海道大学競技プログラミングサークル
PDF
AtCoder Regular Contest 031 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 039 解説
by
AtCoder Inc.
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
by
Takuya Akiba
PDF
AtCoder Regular Contest 042 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 032 解説
by
AtCoder Inc.
PDF
arc047
by
AtCoder Inc.
PDF
明日使えないすごいビット演算
by
京大 マイコンクラブ
PDF
Union find(素集合データ構造)
by
AtCoder Inc.
PPTX
充足可能性問題のいろいろ
by
Hiroshi Yamashita
PDF
プログラミングコンテストでのデータ構造
by
Takuya Akiba
PDF
RMQ クエリ処理
by
HCPC: 北海道大学競技プログラミングサークル
様々な全域木問題
by
tmaehara
Rolling Hashを殺す話
by
Nagisa Eto
Binary indexed tree
by
HCPC: 北海道大学競技プログラミングサークル
AtCoder Regular Contest 030 解説
by
AtCoder Inc.
AtCoder Beginner Contest 015 解説
by
AtCoder Inc.
グラフネットワーク〜フロー&カット〜
by
HCPC: 北海道大学競技プログラミングサークル
指数時間アルゴリズム入門
by
Yoichi Iwata
Re永続データ構造が分からない人のためのスライド
by
Masaki Hara
文字列アルゴリズム
by
HCPC: 北海道大学競技プログラミングサークル
AtCoder Regular Contest 031 解説
by
AtCoder Inc.
AtCoder Regular Contest 039 解説
by
AtCoder Inc.
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
by
Takuya Akiba
AtCoder Regular Contest 042 解説
by
AtCoder Inc.
AtCoder Regular Contest 032 解説
by
AtCoder Inc.
arc047
by
AtCoder Inc.
明日使えないすごいビット演算
by
京大 マイコンクラブ
Union find(素集合データ構造)
by
AtCoder Inc.
充足可能性問題のいろいろ
by
Hiroshi Yamashita
プログラミングコンテストでのデータ構造
by
Takuya Akiba
RMQ クエリ処理
by
HCPC: 北海道大学競技プログラミングサークル
Similar to Convex Hull Trick
PDF
競技プログラミング練習会2015 Normal 第3回
by
Hideaki Nagamine
PDF
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
by
Kensuke Otsuki
PDF
KMC 競技プログラミング練習会 Advanced 第3回 ふろー
by
kyoto university
PDF
SMO徹底入門 - SVMをちゃんと実装する
by
sleepy_yoshi
PDF
Simulation_Report1
by
T2C_
PDF
線形回帰と階層的クラスタリングの実装
by
Yuya Takashina
PPT
Introduction to Algorithms#24 Shortest-Paths Problem
by
Naoya Ito
PDF
abc027
by
AtCoder Inc.
PPT
Gurobi python
by
Mikio Kubo
PDF
JOI春季ステップアップセミナー 2021 講義スライド
by
Kensuke Otsuki
PDF
Comp geom20131107open
by
Kensuke Onishi
PDF
大規模凸最適化問題に対する勾配法
by
京都大学大学院情報学研究科数理工学専攻
PDF
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
PDF
Sanpo
by
oupc
PDF
Sec15 dynamic programming
by
Keisuke OTAKI
PDF
モンテカルロサンプリング
by
Kosei ABE
PDF
Nips yomikai 1226
by
Yo Ehara
PDF
数式を綺麗にプログラミングするコツ #spro2013
by
Shuyo Nakatani
PDF
目指せグラフマスター
by
HCPC: 北海道大学競技プログラミングサークル
PPTX
TopCoder SRM614 解説
by
EmKjp
競技プログラミング練習会2015 Normal 第3回
by
Hideaki Nagamine
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
by
Kensuke Otsuki
KMC 競技プログラミング練習会 Advanced 第3回 ふろー
by
kyoto university
SMO徹底入門 - SVMをちゃんと実装する
by
sleepy_yoshi
Simulation_Report1
by
T2C_
線形回帰と階層的クラスタリングの実装
by
Yuya Takashina
Introduction to Algorithms#24 Shortest-Paths Problem
by
Naoya Ito
abc027
by
AtCoder Inc.
Gurobi python
by
Mikio Kubo
JOI春季ステップアップセミナー 2021 講義スライド
by
Kensuke Otsuki
Comp geom20131107open
by
Kensuke Onishi
大規模凸最適化問題に対する勾配法
by
京都大学大学院情報学研究科数理工学専攻
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
Sanpo
by
oupc
Sec15 dynamic programming
by
Keisuke OTAKI
モンテカルロサンプリング
by
Kosei ABE
Nips yomikai 1226
by
Yo Ehara
数式を綺麗にプログラミングするコツ #spro2013
by
Shuyo Nakatani
目指せグラフマスター
by
HCPC: 北海道大学競技プログラミングサークル
TopCoder SRM614 解説
by
EmKjp
More from HCPC: 北海道大学競技プログラミングサークル
PDF
写像 12 相
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2017 Day3 F: 掛け算は楽しい
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2017 Day3 D: 優柔不断
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 G: Restricted DFS
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 F: 部分文字列分解
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 E: 総和の切り取り
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 B: パフェ
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 A: 間違い探し
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 G: 木
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 E: ジャム
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 H: Revenge of UMG
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 F: MOD Rush
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 C: 串刺し
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 F: グリッドの番号
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 E: 最短経路の復元
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 D: 貪欲が最適?
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 C: 短絡評価
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 B: 自身の 2 倍
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 A: four tea
by
HCPC: 北海道大学競技プログラミングサークル
PDF
プログラミングコンテスト基礎テクニック
by
HCPC: 北海道大学競技プログラミングサークル
写像 12 相
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2017 Day3 F: 掛け算は楽しい
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2017 Day3 D: 優柔不断
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 G: Restricted DFS
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 F: 部分文字列分解
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 E: 総和の切り取り
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 B: パフェ
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 A: 間違い探し
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 G: 木
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 E: ジャム
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 H: Revenge of UMG
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 F: MOD Rush
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 C: 串刺し
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 F: グリッドの番号
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 E: 最短経路の復元
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 D: 貪欲が最適?
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 C: 短絡評価
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 B: 自身の 2 倍
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 A: four tea
by
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテスト基礎テクニック
by
HCPC: 北海道大学競技プログラミングサークル
Convex Hull Trick
1.
導入 実装 応用
おわり Convex Hull Trick えび (rsk0315) HCPC 春の勉強会 @ April 4, 2019 Convex Hull Trick rsk0315
2.
導入 実装 応用
おわり 最近知ったこと (1/3) 最初に,えびちゃんが最近お勉強したことの紹介をします. 興味を持ったものがあったら実装してみてね. フラクショナルカスケーディング 長さ k の sorted 配列 n 個に対して x を探す問題を考える. 愚直にやると O(n log k) のところを O(n + log k) にできる. 双対 LP ある種の最適化問題を別の最適化問題に言いかえる. 最短路とか最小費用流とかに帰着されたりする. Convex Hull Trick rsk0315
3.
導入 実装 応用
おわり 最近知ったこと (2/3) 非再帰セグ木 区間の不等号がどうこう,みたいなバグとばいばいできる. 配列長を 2 べきにしなくてもよい. a[i] の取得を O(1) でできる. 遅延伝播もできる. かっこいい. HL 分解 木のパス上のクエリを高速に処理できる. ブ ル ー フ カ Bor˚uvka 法 最小全域木を求めるアルゴリズム. 各連結成分で最小コストの辺を選ぶのを繰り返す. Convex Hull Trick rsk0315
4.
導入 実装 応用
おわり 最近知ったこと (3/3) Lagrange 補間 n 次多項式 f について f(x0), f(x1), . . . , f(xn) が既知とする. このとき,任意の x に対して f(x) を計算できる. xi = i としておくと高速化が楽. Tonelli–Shanks アルゴリズム a, p に対して x2 ≡ a (mod p) なる x を求める. p = (2q − 1) · 2S に対して O(S log S/ log log S). Convex hull trick 直線群に関する特定のクエリを処理する. 今日はこれを紹介します. Convex Hull Trick rsk0315
5.
導入 実装 応用
おわり 今日の流れ Convex hull trick(以下 CHT)を以下の流れでお勉強します. なにができるの? どう実装するの? どんな問題に応用できるの? Convex Hull Trick rsk0315
6.
導入 実装 応用
おわり できる操作 xy-平面上の直線の集合 L に対して,次の操作を高速に行う. 集合に新たな直線を追加する. L の直線のうち,与えられた座標 x での y の最小値を答える. x y O Convex Hull Trick rsk0315
7.
導入 実装 応用
おわり 実装のやり方 大きく分けて以下の二つがありそう. 連想配列で処理するもの ✓ オンライン処理できる × 実装を雑にやると log が二つつく セグメント木で処理するもの Li Chao (segment) tree とか呼ばれる ✓ 線分の追加もできるかも? × オフライン処理しなきゃかも(クエリの先読み) 最小値クエリの x 座標(の候補)の数を N として 全体で O(N) 空間,クエリあたり O(log N) 時間かかる. × 0 ⩽ x ⩽ 109 とかだとつらい. ✓ 0 ⩽ x ⩽ 105 とかならオンライン処理もできそう. Convex Hull Trick rsk0315
8.
導入 実装 応用
おわり 重要な性質 x y O 最小値をとる部分について傾きが単調減少となる. どの点においても最小値をとらない直線は無視してよい. → 無視できるかどうかの判定はどうしよう? Convex Hull Trick rsk0315
9.
導入 実装 応用
おわり 追加クエリ I こういうのは帰納的に考えると楽で,base case は次の通り. 一本目の直線 → 常に必要. 二本目の直線 傾きが同じなら切片が大きい方は必要ない. そうでなければ両方必要. Convex Hull Trick rsk0315
10.
導入 実装 応用
おわり 追加クエリ II 次のような状況下で直線を追加することを考えるとよい. 不要な直線はすべて捨てられている. 必要な直線が二本以上存在する. 自明なケースの判定: 傾きが最小・最大の直線は常に必要. x の絶対値が十分大きい点を考えよ. 傾きが同一の直線は切片が最小のもののみ必要. Convex Hull Trick rsk0315
11.
導入 実装 応用
おわり 追加クエリ III 追加する直線 ℓ′ に対して,直線二本 ℓ1, ℓ2 を以下のように選ぶ: 傾き順で並ぶ直線群に ℓ′ を入れるときに ℓ′ をはさむ二直線. !! 最小値をとる部分の傾きは単調減少 ℓ?, . . . , ℓ1, ℓ′, ℓ2, . . . , ℓ?. e.g. 傾き {5, 4, 2, 1} の直線群に対して傾き 3 の直線 ℓ′ を追加する → ℓ1 は傾き 4,ℓ2 は傾き 2 の直線. Convex Hull Trick rsk0315
12.
導入 実装 応用
おわり 追加クエリ IV ℓ′ と ℓ1, ℓ2 の位置関係を調べる. x y O ℓ1 と ℓ2 の交点より上を ℓ′ が通る場合,ℓ′ は不要. 交点を通る場合も不要としてよい. Convex Hull Trick rsk0315
13.
導入 実装 応用
おわり 追加クエリ IV ℓ′ と ℓ1, ℓ2 の位置関係を調べる. x y O ℓ1 と ℓ2 の交点より下を ℓ′ が通る場合,ℓ′ は必要. 交点との ℓ′ との位置関係を調べる方法を考えればよい. Convex Hull Trick rsk0315
14.
導入 実装 応用
おわり 追加クエリ V ℓ1 : y = a1x + b1 ℓ2 : y = a2x + b2 ℓ′ : y = a′ x + b′ とすると,ℓ1, ℓ2 の交点 (xc, yc) は計算できる. で,a′xc + b′ と yc の大小関係を考えるとよい. 結局,次の条件が成り立つとき ℓ′ は不要だとわかるはず. 不等号とか逆だったら許して. (a′ − a2) · (b′ − b1) ⩾ (a1 − a′ ) · (b2 − b′ ). 簡単な式で判定できることだけわかってもらえたらいいです. Convex Hull Trick rsk0315
15.
導入 実装 応用
おわり 追加クエリ VI 結局,追加クエリは次のように処理すればよい. 1. ℓ′ に対して前述の判定を行う. → 不要なら終了.必要なら ℓ′ を L に追加. 2. ℓ2 が不要になっていないか同様に判定し,不要なら消す. 2+. 必要な直線が見つかるまで ℓ2 を選び直し,消し続ける. 3. ℓ1 についても同様. これをがんばって実装するとよいです.できますね. ここからは最小値クエリを考えます. Convex Hull Trick rsk0315
16.
導入 実装 応用
おわり 重要な性質 ある x 座標に注目して,各直線の傾きと y 座標の関係を見てみる. x y 傾き y Convex Hull Trick rsk0315
17.
導入 実装 応用
おわり 重要な性質 ある x 座標に注目して,各直線の傾きと y 座標の関係を見てみる. x y 傾き y Convex Hull Trick rsk0315
18.
導入 実装 応用
おわり 重要な性質 ある x 座標に注目して,各直線の傾きと y 座標の関係を見てみる. x y 傾き y Convex Hull Trick rsk0315
19.
導入 実装 応用
おわり 重要な性質 ある x 座標に注目して,各直線の傾きと y 座標の関係を見てみる. x y 傾き y Convex Hull Trick rsk0315
20.
導入 実装 応用
おわり 重要な性質 ある x 座標に注目して,各直線の傾きと y 座標の関係を見てみる. x y 傾き y Convex Hull Trick rsk0315
21.
導入 実装 応用
おわり 重要な性質 ある x 座標に注目して,各直線の傾きと y 座標の関係を見てみる. x y 傾き y 凸になっている!(この最小値がクエリの答え) Convex Hull Trick rsk0315
22.
導入 実装 応用
おわり 最小値クエリ 離散な凸関数の最小値は二分探索で求められる. 連想配列で直線を管理すると,ある点での値を計算しやすそう. map[ 傾き ] → 切片 傾きの降順でソートして持っておくと追加が楽. → 平衡二分探索木ベースの連想配列(std::map)がよさそう. 各ステップで毎回連想配列から探すと O((log |L|)2) 時間. → 工夫してなんとかするとよさそう. Convex Hull Trick rsk0315
23.
導入 実装 応用
おわり 限定された状況下での最適化 追加する直線の傾きが単調減少な場合 → 挿入位置が常に末尾なので,std::vector とかでよい. さらに最小値クエリが単調増加の場合 → 古い直線から不要になっていく.std::deque が適役. ならし O(1) 時間で各クエリを処理できる.わーい. Convex Hull Trick rsk0315
24.
導入 実装 応用
おわり 補足(追記) ある直線と,それが最小値をとる区間との対応付けを覚えておい て処理する方法のが自然かも? なんだけど,整数だと区間の端点を切り下げたり切り上げる必要 があって,これは C++の除算の仕様と気持ちが合わなくて無限に バグらせがち.やめたい.やめてしまった. Convex Hull Trick rsk0315
25.
導入 実装 応用
おわり ひとやすみ ここまでが連想配列ベースの実装. ここからはセグメント木ベースの実装. Convex Hull Trick rsk0315
26.
導入 実装 応用
おわり 実装方針 最小値クエリで聞かれる点 {x0, x1, . . . , xN−1} が既知とする. 各ノードはいくつかの点をカバーしていて,一つの直線を持つ. 直線群のうち xi での値が最小となる直線は,xi をカバーする ノードのいずれかが持っているように保つ. y = 0x + ∞ みたいな直線で初期化しておく. {x0, x1, x2, x3, x4, x5, x6, x7} {x0, x1, x2, x3} {x4, x5, x6, x7} {x0, x1} {x2, x3} {x4, x5} {x6, x7} {x0} {x1} {x2} {x3} {x4} {x5} {x6} {x7} Convex Hull Trick rsk0315
27.
導入 実装 応用
おわり 追加クエリ 根ノードからトップダウンに更新していく.ノードの持つ直線 ℓ と追加する直線 ℓ′ について,3 つの x 座標での値を比較する. {x0, x1, . . . , x7} を例に考える. x0 x4中間を選ぶ→ x7 両端点で下回っているなら ℓ を ℓ′ で置き換えて終了. Convex Hull Trick rsk0315
28.
導入 実装 応用
おわり 追加クエリ 根ノードからトップダウンに更新していく.ノードの持つ直線 ℓ と追加する直線 ℓ′ について,3 つの x 座標での値を比較する. {x0, x1, . . . , x7} を例に考える. x0 x4中間を選ぶ→ x7 両端点で上回っているなら何もせず終了. Convex Hull Trick rsk0315
29.
導入 実装 応用
おわり 追加クエリ 根ノードからトップダウンに更新していく.ノードの持つ直線 ℓ と追加する直線 ℓ′ について,3 つの x 座標での値を比較する. {x0, x1, . . . , x7} を例に考える. x0 x4中間を選ぶ→ x7 1 点で下回っているなら,下回っている方の子ノードを更新. Convex Hull Trick rsk0315
30.
導入 実装 応用
おわり 追加クエリ 根ノードからトップダウンに更新していく.ノードの持つ直線 ℓ と追加する直線 ℓ′ について,3 つの x 座標での値を比較する. {x0, x1, . . . , x7} を例に考える. x0 x4中間を選ぶ→ x7 1 点で下回っているなら,下回っている方の子ノードを更新. Convex Hull Trick rsk0315
31.
導入 実装 応用
おわり 追加クエリ 根ノードからトップダウンに更新していく.ノードの持つ直線 ℓ と追加する直線 ℓ′ について,3 つの x 座標での値を比較する. {x0, x1, . . . , x7} を例に考える. x0 x4中間を選ぶ→ x7 それ以外のとき,ℓ と ℓ′ を交換すると 1 点のパターンに帰着可能. Convex Hull Trick rsk0315
32.
導入 実装 応用
おわり 追加クエリ 根ノードからトップダウンに更新していく.ノードの持つ直線 ℓ と追加する直線 ℓ′ について,3 つの x 座標での値を比較する. {x0, x1, . . . , x7} を例に考える. x0 x4中間を選ぶ→ x7 それ以外のとき,ℓ と ℓ′ を交換すると 1 点のパターンに帰着可能. Convex Hull Trick rsk0315
33.
導入 実装 応用
おわり 最小値クエリ 作り方から明らか. xi をカバーするノードを全部見る. それらのノードの持つ直線の xi での値の最小値が答え. Convex Hull Trick rsk0315
34.
導入 実装 応用
おわり ひとやすみ ここまでは実装の話. ところで CHT はなんの名前なの? 概念? 実装? ??? : {CHT, Li Chao tree, . . . } CHT : {Li Chao tree, . . . } ハッシュは連想配列を指す用語ではない!(素振り) で,ここからは応用の話. Convex Hull Trick rsk0315
35.
導入 実装 応用
おわり 応用 – 例題 EDPC Z – Frog 3 N 個の足場があって,それぞれ高さは h1, h2, . . . , hN です. 足場 j から i へ跳ぶと,コスト (hi − hj)2 + C かかります. 足場 1 から N まで行くときの最小コストを求めてね. 1 ⩽ N ⩽ 2 × 105,1 ⩽ h1 < · · · < hN ⩽ 106,1 ⩽ C ⩽ 1012. dp[i] = min 1⩽j<i {dp[j] + (hi − hj)2 + C}??? O(N2) かかって破滅では... ? Convex Hull Trick rsk0315
36.
導入 実装 応用
おわり 解説 展開してみる. dp[i] = min 1⩽j<i {dp[j] + h2 i − 2hihj + h2 j + C} Convex Hull Trick rsk0315
37.
導入 実装 応用
おわり 解説 展開してみる. dp[i] = min 1⩽j<i {dp[j] + h2 i − 2hihj + h2 j + C} j から見た定数たちは外に出せる. dp[i] = min 1⩽j<i {dp[j] − 2hihj + h2 j } + h2 i + C Convex Hull Trick rsk0315
38.
導入 実装 応用
おわり 解説 展開してみる. dp[i] = min 1⩽j<i {dp[j] + h2 i − 2hihj + h2 j + C} j から見た定数たちは外に出せる. dp[i] = min 1⩽j<i {dp[j] − 2hihj + h2 j } + h2 i + C i に関してまとめてみる. dp[i] = min 1⩽j<i {(−2hj)hi + (dp[j] + h2 j )} + h2 i + C ん? Convex Hull Trick rsk0315
39.
導入 実装 応用
おわり 遷移を眺める dp[2] = min {(−2h1)h2 + (dp[1] + h2 1)} + h2 2 + C; Convex Hull Trick rsk0315
40.
導入 実装 応用
おわり 遷移を眺める dp[2] = min {(−2h1)h2 + (dp[1] + h2 1)} + h2 2 + C; dp[3] = min {(−2h1)h3 + (dp[1] + h2 1), = (−2h2)h3 + (dp[2] + h2 2)} + h2 3 + C; Convex Hull Trick rsk0315
41.
導入 実装 応用
おわり 遷移を眺める dp[2] = min {(−2h1)h2 + (dp[1] + h2 1)} + h2 2 + C; dp[3] = min {(−2h1)h3 + (dp[1] + h2 1), = (−2h2)h3 + (dp[2] + h2 2)} + h2 3 + C; dp[4] = min {(−2h1)h4 + (dp[1] + h2 1), = (−2h2)h4 + (dp[2] + h2 2), = (−2h3)h4 + (dp[3] + h2 3)} + h2 4 + C; Convex Hull Trick rsk0315
42.
導入 実装 応用
おわり 遷移を眺める dp[2] = min {(−2h1)h2 + (dp[1] + h2 1)} + h2 2 + C; dp[3] = min {(−2h1)h3 + (dp[1] + h2 1), = (−2h2)h3 + (dp[2] + h2 2)} + h2 3 + C; dp[4] = min {(−2h1)h4 + (dp[1] + h2 1), = (−2h2)h4 + (dp[2] + h2 2), = (−2h3)h4 + (dp[3] + h2 3)} + h2 4 + C; = ↑傾き ↑切片 Convex Hull Trick rsk0315
43.
導入 実装 応用
おわり 遷移を眺める dp[2] = min {(−2h1)h2 + (dp[1] + h2 1)} + h2 2 + C; dp[3] = min {(−2h1)h3 + (dp[1] + h2 1), = (−2h2)h3 + (dp[2] + h2 2)} + h2 3 + C; dp[4] = min {(−2h1)h4 + (dp[1] + h2 1), = (−2h2)h4 + (dp[2] + h2 2), = (−2h3)h4 + (dp[3] + h2 3)} + h2 4 + C; = ↑傾き ↑切片 dp[i] では,x = hi における直線群の最小値を求めている! → CHT で求められる! Convex Hull Trick rsk0315
44.
導入 実装 応用
おわり まとめ 一般に,以下のような遷移をする DP に対して強気になれる. dp[i] := min 1⩽j<i {p(j)q(i) + r(j)} + s(i) i = 2, . . . , N に対して次の処理をすればよい. 1. 直線 y = p(i − 1) · x + r(i − 1) を追加する. 2. 直線群の x = q(i) での最小値を元に dp[i] を計算する. Convex Hull Trick rsk0315
45.
導入 実装 応用
おわり 問題たち https://atcoder.jp/contests/dp/tasks/dp_z https://atcoder.jp/contests/jag2015summer-day4/ tasks/icpc2015summer_day4_i https://atcoder.jp/contests/ colopl2018-final-open/tasks/colopl2018_final_c https://yukicoder.me/problems/no/409 http://codeforces.com/contest/631/problem/E Convex Hull Trick rsk0315
46.
導入 実装 応用
おわり バグとのたたかい 私は Li Chao tree を実装するのに 9 回 WA を出しました. Convex Hull Trick rsk0315
47.
導入 実装 応用
おわり 自分とのたたかい 久々に fastest を得る遊びをしました (8 ms). Convex Hull Trick rsk0315
48.
終 制作・著作 導入 実装 応用
おわり Thank you! Convex Hull Trick rsk0315
Download