Mex 的常见用法和性质。
sleepy66
·
·
算法·理论
- 根据定义,$mex = x$ 的集合中一定有 $0$ 到 $x - 1$,且没有 $x$。
- 一个大小为 $n$ 的集合的 $mex$ 最大为 $n$。
- 一个序列的极小的 $mex = x(x \in [0, n])$ 的区间数量不超过 $2n$。
区间 $mex$ 的求法:
1. 离线下来用莫队,里面用值域分块平衡复杂度 $\mathcal O(n \sqrt n)$。
2. 扫描线 $r$ ,用线段树维护 $lst_x$ 表示 $a_l = x$ 的最大的 $l$,可以发现查询直接线段树二分即可。想要在线可以把线段树改成主席树,时间复杂度 $\mathcal O(n \log n)$。
如何找出所有极小的 $mex = x$ 的区间?
考虑预处理 $mex = 0$ 和 $mex = 1$ 的极小区间。对于 $mex = x$ 的极小区间 $[l, r]$,可以找出左边最近的 $a_i = x$,和右边最近的 $a_i = x$ 的位置,然后把被包含的删掉。由于最后的个数只有 $2n$ 个,而每一次这种区间只会找到两个疑似极小区间,所以一共只找了 $4n$ 个区间,找的过程用数据结构维护。时间复杂度 $\mathcal O(n \log n)$。