极短 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 初赛] 套娃

浙公网安备 33010602011771号