Codeforces Round 1058 (Div. 2) A - E

我太菜了

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\)

E. Rectangles

我们假设 \(n \le m\),不满足转置一下给的矩阵。

然后我们枚举 \(u,d\),再对每个 \(l\) 检查 \(a _ {u,l}\) 是否等于 \(a _ {d,l}\),如果是则加入 \(s\) 内。不难发现取矩阵 \((u,d,s _ i,s _ {i + 1})\) 一定最优。

现在需要解决取 \(\min\) 的问题,直接暴力做肯定会喜提 TLE。我们按列考虑,发现对于固定的 \(u\)\(d\) 对前面所有值都是有贡献的,所以对于每个 \(u\),在取矩阵的时候给 \((d,[s _ i,s _ {i + 1}])\) 打上标记,枚举完所有 \(d\)\(l\) 再从后往前下放标记。

时间复杂度 \(\Omicron(n ^ 2 m)\),因为 \(n \le m\) 所以 \(n\) 最大为 \(\sqrt{nm}\),复杂度为 \(\Omicron(nm \sqrt{nm})\)

posted @ 2025-10-13 10:31  xguagua_233  阅读(108)  评论(0)    收藏  举报