构造题单
AGC030C Coloring Torus
AGC059D Distinct Elements on Subsegments
设位置 \(i\) 的元素为“右-重要的”,当且仅当 \([i, i + k - 1]\) 里它的颜色独一无二,此时记 \(f_i = 1\);同理可以定义“左-重要的”,此时记 \(g_i = 1\)。
考虑 \(b_i\) 和 \(b_{i + 1}\) 的关系,他们的差一定不能大于一。则转化条件,有:
- 如果 \(b_i = b_{i + 1}\),则 \(f_i = g_{i + k}\);
- 如果 \(b_i + 1 = b_{i + 1}\),则 \(f_i = 1, g_{i + k} = 0\);
- 如果 \(b_i - 1 = b_{i + 1}\),则 \(f_i = 0, g_{i + k} = 1\)。
把能确定的先确定了,继续思考合法的条件。这个 \(f\) 和 \(g\) 肯定形成了某种对应关系,我们继续挖掘一下。考虑最后可能的一个合法序列,令 \(rn_i\) 为右边第一个颜色和 \(ans_i\) 相同的元素,没有即 \(\inf\)。同理定义 \(ln_i\)。我们可知 \(f_i, g_i\) 的值与 \(rn_i, ln_i\) 的值直接相关,且又因为 \(rn\) 和 \(ln\) 一一对应(你在我的右边第一个,我就在你的左边第一个),所以记录 \(f_x = 1\) 的集合 \(\{x\}\),\(g_y = 1\) 的集合 \(\{y\}\),\(x, y\) 之间一一对应。
我们构造一组合法的 \(x, y\) 就可以了。先前已经确定了很多 \(f, g\),我们就考虑维护两个指针 \(i, j : 1 \to n + k - 1\),\(i\) 在前 \(j\) 在后,每次 \(g_i = 1\) 就是需要匹配了,我们移动 \(j\) 知道 \(j \in [i - k + 1, i]\) 且 \(f_j = 1\) 或 \(f_j\) 未确定,然后把他们匹配起来,如果 \(f_j\) 未确定,那就在确定它的同时把 \(g_{j + k} = 1\)。
这个贪心策略是很好证明的。匹配完之后,我们已经知道哪些元素相等,并查集扫一遍就出答案了。

浙公网安备 33010602011771号