Loading

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\) 个区间是不交的,因为如果相交,那么证明取交的那一部分比两个区间都要优,那么你的区间一定求的就不是最优的。

posted @ 2025-11-23 21:15  Alexande  阅读(6)  评论(0)    收藏  举报