Submit Search
Upload
Convex Hull Trick
•
1 like
•
3,507 views
HCPC: 北海道大学競技プログラミングサークル
Follow
HCPC 勉強会 (2019/4/4) - Convex Hull Trick ※文字が見えない場合は、ダウンロードするかフルスクリーンにしてご覧ください
Read less
Read more
Technology
Report
Share
Report
Share
1 of 48
Download now
Download to read offline
Recommended
双対性
双対性
Yoichi Iwata
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
様々な全域木問題
様々な全域木問題
tmaehara
Abc009
Abc009
AtCoder Inc.
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
AtCoder Inc.
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
Recommended
双対性
双対性
Yoichi Iwata
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
様々な全域木問題
様々な全域木問題
tmaehara
Abc009
Abc009
AtCoder Inc.
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
AtCoder Inc.
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
AtCoder Inc.
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
AtCoder Inc.
指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端
Yoichi Iwata
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
AtCoder Inc.
2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方
Tsuneo Yoshioka
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
AtCoder Inc.
ユークリッド最小全域木
ユークリッド最小全域木
理玖 川崎
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
Yuma Inoue
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
AtCoder Inc.
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoder Inc.
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
AtCoder Inc.
WUPC2012
WUPC2012
Dai Hamada
abc032
abc032
AtCoder Inc.
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
AtCoder Inc.
全域木いろいろ
全域木いろいろ
HCPC: 北海道大学競技プログラミングサークル
topology of musical data
topology of musical data
Tatsuki SHIMIZU
introductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysis
Tatsuki SHIMIZU
More Related Content
What's hot
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
AtCoder Inc.
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
AtCoder Inc.
指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端
Yoichi Iwata
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
AtCoder Inc.
2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方
Tsuneo Yoshioka
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
AtCoder Inc.
ユークリッド最小全域木
ユークリッド最小全域木
理玖 川崎
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
Yuma Inoue
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
AtCoder Inc.
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoder Inc.
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
AtCoder Inc.
WUPC2012
WUPC2012
Dai Hamada
abc032
abc032
AtCoder Inc.
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
AtCoder Inc.
全域木いろいろ
全域木いろいろ
HCPC: 北海道大学競技プログラミングサークル
What's hot
(20)
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
ユークリッド最小全域木
ユークリッド最小全域木
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
Rolling Hashを殺す話
Rolling Hashを殺す話
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
WUPC2012
WUPC2012
abc032
abc032
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
全域木いろいろ
全域木いろいろ
Similar to Convex Hull Trick
topology of musical data
topology of musical data
Tatsuki SHIMIZU
introductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysis
Tatsuki SHIMIZU
20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算
matsumoring
PRML 1.6 情報理論
PRML 1.6 情報理論
sleepy_yoshi
PFDS 8.4.3 Real-Time Deques
PFDS 8.4.3 Real-Time Deques
昌平 村山
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
Unity Technologies Japan K.K.
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
Masahiro Sakai
Sec15 dynamic programming
Sec15 dynamic programming
Keisuke OTAKI
PRML 10.4 - 10.6
PRML 10.4 - 10.6
Akira Miyazawa
ディジタル信号処理 課題解説(その3) 2014年度版
ディジタル信号処理 課題解説(その3) 2014年度版
dsp_kyoto_2014
Icml yomikai 07_16
Icml yomikai 07_16
Yo Ehara
複素数・四元数と図形の回転
複素数・四元数と図形の回転
Yoshihiro Mizoguchi
AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説
AtCoder Inc.
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3
noname409
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
オンライン凸最適化と線形識別モデル学習の最前線_IBIS2011
オンライン凸最適化と線形識別モデル学習の最前線_IBIS2011
Preferred Networks
フラグを愛でる
フラグを愛でる
MITSUNARI Shigeo
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
Kazuyuki TAKASE
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
Taketo Sano
Chainerで流体計算
Chainerで流体計算
Preferred Networks
Similar to Convex Hull Trick
(20)
topology of musical data
topology of musical data
introductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysis
20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算
PRML 1.6 情報理論
PRML 1.6 情報理論
PFDS 8.4.3 Real-Time Deques
PFDS 8.4.3 Real-Time Deques
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
Sec15 dynamic programming
Sec15 dynamic programming
PRML 10.4 - 10.6
PRML 10.4 - 10.6
ディジタル信号処理 課題解説(その3) 2014年度版
ディジタル信号処理 課題解説(その3) 2014年度版
Icml yomikai 07_16
Icml yomikai 07_16
複素数・四元数と図形の回転
複素数・四元数と図形の回転
AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3
ウェーブレット木の世界
ウェーブレット木の世界
オンライン凸最適化と線形識別モデル学習の最前線_IBIS2011
オンライン凸最適化と線形識別モデル学習の最前線_IBIS2011
フラグを愛でる
フラグを愛でる
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
Chainerで流体計算
Chainerで流体計算
More from HCPC: 北海道大学競技プログラミングサークル
写像 12 相
写像 12 相
HCPC: 北海道大学競技プログラミングサークル
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
HCPC: 北海道大学競技プログラミングサークル
ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
HCPC: 北海道大学競技プログラミングサークル
More from HCPC: 北海道大学競技プログラミングサークル
(20)
写像 12 相
写像 12 相
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
Recently uploaded
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
Recently uploaded
(9)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
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 now