极短 mex 区间

Part I 定义

给定一个长度为 \(n\) 的序列 \(a\),定义一个区间 \([l,r]\)极短 \(\mathrm{mex}\) 区间 当且仅当不存在子区间 \([l',r'] \subseteq [l,r]\) 满足 \(\mathrm{mex}(a_{l'},a_{l'+1},...,a_{r'})=\mathrm{mex}(a_{l},a_{l+1},...,a_r)\)。下文我们用 @ 表示这种区间,用 \(x\) - @ 表示 \(\mathrm{mex}=t\) 的 @。

Part II 性质

对于这种区间最多有 \(2n\) 个。证明如下:

  • 首先若 \([l,r]\) 是 @,那么有 \(a_l \ne a_r\),因为如果相等显然扣掉一边 \(\mathrm{mex}\) 不变得矛盾。

  • 那么不妨令 \(a_l>a_r\),在之后的分析中 \(a_l<a_r\) 是对称的。

  • 考虑先扣掉 \(a_l\)。那么因为 \([l,r]\) 是 @,那么扣掉以后 \(\mathrm{mex}\) 一定改变,说明原本的 \(\mathrm{mex}\) 一定是大于 \(a_l\) 的,所以扣掉以后的 \(\mathrm{mex}\) 显然是 \(a_l\)。因此 \([l+1,r]\)\(\mathrm{mex}=a_l\)

  • 再扣掉了 \(a_l\) 之后继续扣掉 \(a_r\),即 \([l+1,r-1]\)。类似的,我们有它的 \(\mathrm{mex}=a_r\)

  • 那么固定 \(l+1\),即 \(\mathrm{mex}([l+1,r])\) 固定为 \(a_l\)\(\mathrm{mex}([l+1,r-1])=a_r\) 满足小于 \(\mathrm{mex}([l+1,r])=a_l\),那么显然至多在一个 \(r\) 处取到。

  • 那么对于 \(a_l>a_r\) 的数量上界是 \(n\),对称到 \(a_l<a_r\) 得到上界是 \(2n\)

Part III 应用

Part III.1 求解极短 mex 区间

考虑对于所有 @ \(\mathrm{mex}\) 从小到大扫,也就是我们从小到大求出所有 \(t\) - @。

可以发现一件事情,所有 \(t\) - @ 一定是由一个 \(t'\) - @ 再在左端点左边或者右端点右边拼上 \(t'\)\(t-1\) 的数构成的,其中 \(t'<t\)。这一点如何理解呢?对于一个区间 \([l,r]\),我们考虑从左端点开始一点点往后扩展它,那么显然如果我们每次都往后跳第一个改变 \(\mathrm{mex}\) 的点,那么显然一定能扩展到 \([l,r]\)

于是我们可以对于所有 \(t\) 维护一个 vector 用来记录候选的 \(t\) -@ 。那么考虑 \(t\) 如何扩展,只需要把所有 \(t\) - @,分别在往左边和右边找到第一个 \(t\) 然后算一下两个的 \(\mathrm{mex}\) 然后放到对应 vector 里面即可。

然后每次新扫到一个 \(t\) 就把它的候选区间全检查一遍就行了,检查是简单的,我们只需要保证 \(\mathrm{mex}([l,r]) \ne \mathrm{mex}([l+1,r])\)\(\mathrm{mex}([l,r]) \ne \mathrm{mex}([l,r-1])\) 即可。

这里所有关于区间 \(\mathrm{mex}\) 的信息都可以用主席树维护。

分析时间复杂度,因为总的可行区间数量是 \(2n\) 级别的,所以任意时刻的 vector 的候选区间数量上界就是 \(4n\)。所以复杂度就是 nlog 级别的,常数不小。

也有使用 ODT 维护的做法,这里不叙述,有意者可自行学习。

Part III 2. 求解极短 mex 区间对应的极长区间

这部分是简单的。

对于一个 @:\([l,r]\),我们显然只需要向左找到最远的不影响 \(\mathrm{mex}\) 的端点 \(l'\),向右找到最远的不影响 \(\mathrm{mex}\) 的端点 \(r'\) 即可,对应的极长区间即是 \([l',r']\)

Part III 3. 丰收

现在我们已经求出了极短和对应极长 \(\mathrm{mex}\) 区间,那么我们考虑一个 @:\([l,r]\) 和它对应的极长 \(\mathrm{mex}\) 区间 \([l',r']\),以及它们的 \(\mathrm{mex}\) 假设为 \(c\)。那么对于所有 \([l,r] \subset [x,y] \subset [l',r']\)\([x,y]\),都满足 \(\mathrm{mex}([x,y])=c\)

我们如果把所有 \([l,r]\) 都看成一个在二维平面上的坐标为 \((l,r)\) 的点,那么很显然对于一组上文表述的 \([l,r],[l',r']\),就相当于在说明二维平面中一个矩形的点对应区间的 \(\mathrm{mex}=c\)。而我们又知道矩形的个数是 \(O(n)\) 的,并且矩形覆盖有着很好的性质,可以利用这一点解决许多问题。

Part IIII 4. 习题

  • P10169 [DTCPC 2024] mex,min,max
  • P9970 [THUPC 2024 初赛] 套娃

附录 习题提示

P1:

L0 区间 $\mathrm{mex,min}$ 能同时有值吗?
L1 是否可以容斥?
L2 子区间 $\mathrm{max}$ 有什么性质?
L3 矩形并?

P2:

L0 区间对所有 $k$ 考虑贡献?
L1 区间推平?
L2 直接 ODT 复杂度是对的吗?
posted @ 2025-11-12 11:09  v1ne0qrs  阅读(575)  评论(0)    收藏  举报