convex_hull_trick
クラス · Convex Hull Trick (monotone)
template <class T, class Comp = std::less<T>>
struct convex_hull_trick;
概要
Convex Hull Trick (monotone)
直線 $ax+b$ を傾き単調順に add し、任意の $x$ における最小値(または最大値)を 二分探索で求める。最小値は Comp = std::less<>(既定)で傾きを単調減少順、 最大値は Comp = std::greater<> で傾きを単調増加順に add すること。 クエリ get(x) の $x$ は任意の順で与えてよい。
メンバ関数
| 名前 | 説明 | 計算量 |
|---|---|---|
add |
直線 $ax+b$ を追加する(傾きは単調順) | 償却 $O(1)$ |
get |
$x$ における最小値(または最大値) | 直線数を $n$ として $O(\log n)$ |
empty |
直線が登録されていないか返す | $O(1)$ |