参考资料
- IOI2018 集训队论文 高睿泉 《浅谈保序回归问题》
- 大米饼的博客
Sol
部分分:
考虑一个更加一般的形式:已知
定义一个点集
引理 1
能达到最优解的
证明:将
引理 2
如果
证明:参考 IOI2018 集训队论文《浅谈保序回归问题》
引理 2 启发我们可以考虑这样的一个过程:每一次找到一个满足
由引理 1 可知,无论以任何顺序合并,最终得到的
正解
把询问离线下来依次处理。对于询问
最终的划分方案一定是:保留
考虑如何求出
之间的元素确实能合并成一段(即合并过程中不存在把 的两个元素合并了的情况)
考虑这样一个算法:从大到小枚举
- 对于某个固定的
来说- 考虑某个比求出的
更小的 : 一定合并了不能合并的段(即满足 的两个段) - 考虑某个比求出的
更大的 : 一定还能和左边的段合并,所以不可能和 一起作为最终的等值段
- 考虑某个比求出的
- 故而,对于固定的
来说,最大的满足 的 是唯一可能使 合法的
假设
所以,算法结束时求出来的
算法的优化:
- 在已知
的情况下求最大的满足 的- 可以证明,如果
满足条件,那么 也满足条件- 由于
,又因为 ,所以 ,那么 一定小于 中的元素的平均值(也就是 ),所以 一定也满足条件
- 由于
- 所以可以直接二分
- 可以证明,如果
- 求最大的
,使得满足 的最大的 也满足- 一个重要的观察是,对于某个固定的
,满足 的最大的 ,就是使 取到最大值的 - 可以证明,如果
满足条件,那么 也满足条件- 设
求出的 为 , 求出的 为 ,那么 , 和 都小于 ,所以 小于
- 设
- 所以可以直接二分
- 一个重要的观察是,对于某个固定的
总时间复杂度为