P14567 【MX-S12-T2】区间
单 \(\log\) 选手前来报到。
首先区间类问题都可以考虑扫描线或者前缀和,这里显然没有可减性,我们考虑扫描线。
令此时扫到的 \(r\) 为右端点,我们如何寻找一个左端点,更进一步,因为有 \(f\) 单调不减,所以我们只需要找到最靠右的左端点即可(重排不等式)。
此时我们先不要求找到左端点,先考虑哪些位置一定不是左端点,显然,最靠右的一个非最右颜色的位置(换句话说,这种颜色最右位置在 \(r\) 右边)之前的位置都不可能是左端点,选了这些元素意味着 \(r\) 必须向右扩展。
考虑此时对于剩下的位置 \(p\),记一个 \(lst_p\) 表示 \(p\) 这个位置的这种颜色最左的下表是多少。那么如果此时一个左端点 \(l\) 合法,当前仅当 \(\min\limits_{i = l}^r lst_i = l\),而显然 \(\min\limits_{i = l}^r lst_i \le l\),因此变为求 \(l - \min\limits_{i = l}^r lst_i = 0\) 的 \(l\),此时用线段树加单调栈维护一个最靠右的 \(0\) 的位置即可(因为这是最小值,所以可以维护)
但是你现在知道了 \(n\) 个可能的待选区间,无法快速的求出答案。
一个性质是,这 \(n\) 个区间是不交的,因为如果相交,那么证明取交的那一部分比两个区间都要优,那么你的区间一定求的就不是最优的。

浙公网安备 33010602011771号