我太菜了
A. MEX Partition
你可以发现最优的划分就是整个序列作为一个划分。因为需要 MEX 都相等,所以划分出来的子序列可以合并,合并完了就是原序列了,因此原序列的 MEX 即为答案。
读错题挂一发,火大。
B. Distinct Elements
先对 \(b\) 做差分,设为 \(d\)。
你可以发现,如果 \(a _ i\) 在 \(t\) 出现了,那它一定在 \([p,t](p \le t)\) 出现了。
因此 \(a _ i\) 的贡献是 \(i - m\),其中 \(m\) 代表 在 \(i\) 之前 \(a _ i\) 最后一次出现的位置,没有出现则为 \(0\)。
现在我们需要 \(i - m = d _ i\),即 \(m = i - d _ i\),于是我们对每种 \(m\) 维护一个队列,每次取第 \(m\) 个队列的队首再将这个队首放进第 \(i\) 个队列里。
C. Reverse XOR
我们设 \(x\) 的二进制表示为 \(\overline{x _ 0 x _ 1 \dots x _ t}\),则 \(f(x) = \overline{x _ t x _ {t - 1} \dots x _ 0}\),\(x \oplus f(x) = \overline{(x _ 0 \oplus x _ t)(x _ 1 \oplus x _ {t - 1}) \dots (x _ t \oplus x _ 0)}\)。
可以发现,\(x \oplus f(x)\) 是对称的,且若 \(t\) 为奇数,则 \(x _ {\frac{t}{2}} = 0\)。
于是我们就可以枚举 \(n\) 包含前导 \(0\) 的长度,然后从两边往中间判断是否相等。
D. MAD Interactive Problem
差临门一脚就想出来,还是太菜了。
我们可以从 \(r = 2\) 开始查询 \([1,r](r \ge 2)\),如果返回值不为 \(0\),则说明 \(a _ r\) 一定是返回值,然后在之后的询问中就不问这个位置,这样我们用 \(2n - 1\) 次操作确定了 \(n\) 个位置。
然后,我们倒着再做一遍,查询 \([l,2n](l \le 2n - 1)\),若 \(a _ l\) 有值就不询问,这样我们就用 \(n - 1\) 次确定了所有位置,总次数 \(3n - 2\)。