构造题单

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

这个贪心策略是很好证明的。匹配完之后,我们已经知道哪些元素相等,并查集扫一遍就出答案了。

posted @ 2025-02-20 21:18  隱貓柒  阅读(26)  评论(0)    收藏  举报