CF2146E

对于数组 \(a\),定义 \(w(a)\)\(a\) 中满足 \(a_i > mex(a)\) 的下标数。现在给定长度为 \(n\) 的数组,对于每个 \(r\), 求出 \(\max\limits_{l = 1}^{r} w(a[l \sim r])\)

考虑枚举 \(x = mex(a)\),设 \(x\) 出现的位置是 \(p_1 < p_2 < \cdots < p_k\)。对于 \(r = p_i\) 是没有贡献的,对于 \(p_i < r < p_{i + 1}\) 的贡献是 \(a_{p_i + 1} \sim a_r\)\(> x\) 的数量(取 \(l = p_i + 1\))。

但是这有个问题,不能保证 \(x\)\(a_{l} \sim a_r\)\(mex\)。但没有关系,因为这个 \(mex\) 一定小于等于 \(x\),且真正的 \(mex\)\(r\) 的贡献肯定不劣于 \(x\)\(r\) 的贡献(\(> mex\) 的数更多)。

\(b_i\) 表示 \(i = mex\) 对当前 \(r\) 的贡献。从左往右扫一遍 \(r\),有一下三种情况:

  • \(a_r = i\)\(b_i \leftarrow 0\)
  • \(a_r > i, b_i \leftarrow b_i + 1\)
  • \(a_r < i\)\(b_i\) 不变。

现在问题就转化为了一个区间加与单点赋值的问题,使用线段树轻松解决。

时间复杂度:\(O(n \log V)\)

此题关键是想到枚举 \(mex\),考虑 \(mex\)\(r\) 的贡献(用到了一个放宽限制的思想)。然后进行扫描线即可。(比较搞笑的是没想到 扫描线,sb 了

posted @ 2025-10-14 20:57  xiehanrui0817  阅读(6)  评论(0)    收藏  举报