关于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)\)

posted @ 2024-08-18 10:27  Displace  阅读(49)  评论(0)    收藏  举报