n 个开区间, 从中选 m (m > 1) 个, 它们的权值为 |交| * |并|. 求最大权值. (1 ≤ n ≤ 10^6, 1 ≤ l < r ≤ 10^6) [bzoj 2687] 交与并 题面没写 "数据有一定梯度", 我还以为不是10分, 就是100分......
首先, 如果A包含于B, 那么用B替换A, 答案不会变差. 但是有一种情况, A是不能被替换为B的: 只选择A和B. 那么, 对于所有区间, 找出包含它的最长区间. 如果存在, 更新答案 (即
按左端点排序; 左端点相同, 长度大的放前面. 用区间长度更新右端点位置的权值, 那么待查询的是后缀最大值, 用树状数组维护.
处理完之后, 区间左右端点均非严格递增. 发现, 选择
对于一个
由于左右端点均非严格递增, 一旦对于某个
称使
有了决策单调性, 我们知道决策表长这样: 111 222 33333 4 555
接下来有两种方案: - 单调栈 决策表每一段是单调栈中的一个节点. 每计算出一个新的值, 用它更新决策表. 如果可以整段替换, 就弹栈. 否则, 在这一段内二分, 分裂这个节点. - 分治 定义
时间复杂度都是
听了三位神犇讲这题, 每人讲了至少两遍, 终于产生了一点明白的感觉......非常感谢 >﹏<