维护直线的不同思路

来看这样的查询:

\[ f(x) = \min_{i}\{k_ix + b_i\} \]

李超线段树

这很暴力。直接正向维护直线即可。

转化为截距

如果最终的 \(\arg \min\)\(j\),那么有:

\[ \begin{aligned} f(x) &= k_jx + b_j \\ b_j &= x\cdot(-k_j) + f(x) \end{aligned} \]

注意查询的时候,其实 \(x\) 也是已知的。我们把 \(x\) 看成斜率,就转换成如下问题:

在点集 \((-k_i, b_i)\) 中,找出一个点 \(j\),使得过 \(j\) 的斜率为 \(x\) 的直线截距最小。

可以维护点集的凸包,然后二分凸包上的点即可找到 \(j\)

后面的步骤就非常像 wqs 二分