斜率优化学习笔记
upd 2024.1
之前写的太牛马了,我当时还没能理解,现在补一下:
拆成 $f[i]+S=f[j]+F(i)G(j)$ 之后,由于 $F(i),G(j)$ 分别单调,$G(j)$ 越大,往后枚举 $i$ 的时候受到的增益也就越大。
所以两个点如果 $f[i]>f[j],G(i)<G(j)$,那么最开始一段是 $i$ 比 $j$ 优,但是会被逐渐反超。
所以用斜率优化,最后如果到某个 i 的时候前面某项不敌后面某项,那直接pop掉。
那么问题来了,$F,G$ 不单调的时候阁下又应该如何应对呢?
很简单,用万能的 cdq 分治即可,转化成左区间对右区间的贡献,然后左边按 $G$ 排序,建凸包,右边按 $F$ 排,扫一遍凸包即可。