关于hdu7537的一点拓展
感谢 Larunatrecy 对本文的极大帮助。
拓展1
题意:给定了 \(n\) 个一次函数,\(m\) 次查询,求某个横坐标上严格次大函数值。
类似斜率优化,我们求出来上凸壳,上凸壳上是最大值毋庸置疑。
那么删除掉上凸壳被当前斜率截到的点,剩下的点就是严格次大值的备选点。
注意到删除的点一定是凸壳的一段连续区间,所以只需要再在前缀和后缀凸壳上做一次二分。
没被选在凸壳上的点也有可能成为次大值,所以还需要对没被选的点再维护一层凸壳。
这样做复杂度可以做到 \(O(n+mlogn)\)。
拓展2
题意:给定了 \(n\) 个一次函数,\(m\) 次查询,求某个横坐标上非严格第k大函数值,数据随机。
二分答案,转换成在线半平面数点问题。
因为数据随机,所以把平面分成 \(O(\sqrt n\times \sqrt n)\) 个块,每个块内期望只有 \(O(1)\) 个点。
预处理行大块的后缀和,查询时就可以做到 \(O(\sqrt nlogn)\),总复杂度是 \(O(n\sqrt n+m\sqrt nlogn)\)。
找到了一个类似的题:【UNR #4】己酸集合,但还没想到怎么套在这题上面。
查资料还看到一个名叫TB5x分治的算法,可以解决范围查询最优次数,看我能不能学会吧。
拓展3
题意:给定了 \(n\) 个一次函数,\(m\) 次查询,求某个横坐标上严格第k大函数值。
把拓展1做 \(k\) 次就好了,但每次二分时需要检查 \(O(k)\) 个凸壳,复杂度是 \(O(n+mk^2logn)\)。

浙公网安备 33010602011771号