极小 Mex 区间

对于求解 mex 相关问题,可以使用极小 mex 区间的 trick 解决。

极小 mex 区间定义为所有 \([l,r]\) 满足 \(\nexists l\le l'\le r'\le r\)\([l',r']\ne [l,r]\)\(mex([l',r'])=mex([l,r])\)。即不存在子区间与其 mex 相同。

极小 mex 区间解决问题最重要的性质是极小 mex 区间的个数是 \(O(n)\) 级别的。

考虑一极小 mex 区间 \([l,r]\),钦定 \(a_l>a_r\),因为该区间为极小 mex 区间,所以无论删去 \(l,r\) 对区间 mex 均有影响,由此不难得出 \(mex([l,r])=a_l+1\)\(a_r\) 仅在区间 \([l,r]\) 内唯一出现。

考虑若有极小 mex 区间 \([l,r']\)\(r'>r\)\(a_l>a_{r'}\) 同为极小 mex 区间。同理可得 \(mex([l,r'])=a_l+1\),而所有 \(i\le a_l\) 均在 \([l,r]\) 内出现过,则 \(a_{r'}\) 不满足唯一出现。

则此情况下对于每个 \(l\) 仅存在一个 \(r\) 与其对应,
\(a_l<a_{r'}\) 同理,故准确上界为 \(2n\)

通过极小 mex 区间还可求出极大 mex 区间。每个最小 mex 区间 \([l,r]\)\(mex([l,r])=x\) 找到 \(l\) 左边第一个 \(x\) 的位置 \(posl\)\(r\) 右边第一个 \(x\) 的位置 \(posr\),则此极小 mex 区间对应的极大 mex 区间为 \((posl,posr)\),所有 \(i\in(posl,l]\)\(j\in[r,posr)\)\(mex([i,j])=x\)

且所有极小 mex 区间与其极大 mex 区间所得出的区间(即 \([i,j]\) 包含所有区间)。

如何求极小 mex 区间。首先所有 \(mex([l,r])=0/1\) 的极小 mex 区间是容易得到的,不难得出这两种情况下区间长度为 1。

然后从小到大每个通过 \(mex=i\) 的极小 mex 区间找到左右第一个 \(a_{posl}=i,a_{posr}=i\),拓展出 \([posl,r],[l,posr]\) 两个区间,主席树求出区间 mex,将这两个区间塞入对应的极小 mex 区间集合。每轮开始前先将集合内不满足极小条件的区间去除。

正确性

证明正确性,即证明对于任意极小 mex 区间 \([l,r]\)\(mex([l,r])=x\),均有一子区间能拓展出 \([l,r]\)

假定极小 mex 区间 \([l',r']\) 拓展出 \([l,r]\),仍旧钦定 \(a_l>a_r\),则 \(mex([l',r'])=a_l\),因为 \(a_r\)\([l,r]\) 唯一出现且 \(mex((l,r])=a_l\),所以一定存在 \([l',r]\)\(l'>l\)\(mex([l',r])=a_l\)

复杂度

因为每轮开始时将不满足极小的区间去除了,则拓展到 \(mex=i\) 的极小 mex 区间时所有 \(mex<i\) 的区间总数是 \(O(n)\) 量级的(准确为 \(2n\)),每个区间最多向 \(mex=i\) 拓展两个区间,故准确上界为 \(4n\)

P9970 [THUPC 2024 初赛] 套娃

给定序列,求序列所有长度为 \(k(1\le k\le n)\) 的子区间 mex 组成集合的 mex。


考虑求出极小 mex 区间,对于每个极小区间 \([l,r]\),再求出其对应极大 mex 区间 \([L,R]\),则对于 \(k\in[r-l+1,R-l+1]\) 的子区间 mex 集合中均会出现 \(mex([l,r])\)。按 mex 递减枚举极小 mex 区间集合,则每次相当于将没有出现 \(mex([l,r])\)\(k\) 的答案推平为 \(mex([l,r])\),odt 即可。

P10169 [DTCPC 2024] mex,min,max

给定序列 \(\{a_n\}\)\(k\),求有多少子区间 \([l,r]\) 满足 \(\operatorname{mex}\{a_l,a_{l+1},\dots,a_{r-1},a_r\}+\min\{a_l,a_{l+1},\dots,a_{r-1},a_r\}+k\geq \max\{a_l,a_{l+1},\dots,a_{r-1},a_r\}\)


套路的 \(mex,min\) 必有一者为 0,考虑将满足条件的区间分为 \(mex+k\ge max\)\(min+k\ge max\)\(k\ge max\),则最终答案为 \(cnt_1+cnt_2-cnt_3\)\(cnt\) 分别为满足某一个条件的区间个数。

其中 \(\min+k\ge max\)\(k\ge max\) 固定左端点,满足条件的右端点具有单调性,直接二分计算。

对于 \(mex+k\ge max\) 求出极小极大 mex 区间 \([l,r],[L,R]\)\(i\in[L,l],j\in[r,R]\) 的区间 mex 不变满足条件的左右端点也具有单调性,分别二分即可。

P13693 [CEOI 2025] Equal Mex

给定序列,每次询问区间 \([l,r]\) 求有多少个 \(k\) 满足可以将区间划分为 \(k\) 段,每段 mex 相同。


很好的性质题。

首先 \(k\) 具有单调性,因为假设 \(k+1\) 满足条件,则将相邻两段合并,因为 mex 相同,则合并后 mex 仍然相同。

进而因为 mex 不变,最终并为一段就是整个区间,所有划分的每一段 mex 均等于整个区间的 mex。

求出极小 mex 区间,则每一种划分方案每一段可以对应一个 \(mex=mex([l,r])\) 极小 mex 区间。即假设划分方案 \([l_1,r_1],[l_2,r_2],\cdots\) 则每一段均包含一个极小 mex 区间。

所以问题转化为区间 \([l,r]\) 中的极小 mex 区间最多选出多少个不交区间,因为 mex 区间不包含,所以就是经典套路,贪心的选右端点最小的即可。倍增优化一下从任意段选 \(2^i\) 段后的最小右端点即可 \(O(q\log n)\) 解决。

posted @ 2025-10-16 16:18  Uesugi1  阅读(24)  评论(0)    收藏  举报