問題はこちら
問題概要
長さの数列と長さの数列がある.を求めよ.解説
愚直に実装するとになります.各毎にが最小になるようなを求めます.もちろんこのままだと毎にかかるのでダメですがをソートすることで以下の性質をもつようになります.
- 任意のに対してが最小になるを,が最小になるをとするとが成り立つ.
これはが凸関数であることから簡単に分かります.
この性質が成り立つ場合に各について最小値を取るをで求められるアルゴリズムとしてMonotone Minimaというものがあります.それを用いると全体でで求められます.
上記の性質はMonotoneといいますが,もう少し条件を強めた性質「の任意の部分集合についてもMonotoneである」が成り立つのでSMAWKアルゴリズムが使えます.これを用いると各について最小値を取るをで求められます.どちらにせよソートがネックになるので全体でかかります.
提出プログラム
https://atcoder.jp/contests/abc212/submissions/27798629 Monotone Minimahttps://atcoder.jp/contests/abc212/submissions/27797928 SMAWKアルゴリズム