CF1876D Lexichromatography 题解

Problem - D - Codeforces

Lexichromatography - 洛谷

  • 先注意读题:

  • 对于所有的值 \(k\),在这个序列的任意子区间 \([l,r]\),值为 \(k\) 且为红色的位置数 减去 值为 \(k\) 且为蓝色的位置数 的绝对值不超过 \(1\)

  • 注意是任意子区间

  • 这说明什么?说明如果只有第二个条件,我们只需要让拥有相同值的数交替染红色和蓝色即可,因此一种值最多只有两种情况,最终答案的情况是 \(2^k\)

  • 我们考虑加上第三个限制怎么做?考虑遇到第一个红蓝组成的子序列不等的值,此时我们存在唯一一种是否交换这两种颜色的方案,使得红子序列字典序严格小于(或大于)蓝子序列;如果两个子序列值相等的两个位置,交换后肯定还相等。

  • 因此,设 \(a\) 表示红 \(<\) 蓝的方案数,\(b\) 表示蓝 \(<\) 红的方案数,\(c\) 表示 \(=\) 方案数。可以知道 \(a=b,a+b+c=2^k\),所以 \(a=b=\frac{2^k-c}{2}\)

  • 现在我们只需要考虑怎么求 \(c\)。我们发现如果出现 1 2 2 1 这种形状的,那肯定就不行了,因为无论染成什么颜色都会有相应的大小关系,即 \(c=0\)

  • 而如果不是这种形状,如果把同一个值的第奇数个和第偶数个连一条线段,则两两线段不会互相包含,那这两个值第一个位置染的颜色必须相同,也就是说他们被”绑定“了。设绑定的组数为 \(d\),则 \(c=2^d\)

  • 最终复杂度 \(O(n \log n)\)\(\log\) 在并查集

posted @ 2024-01-16 21:08  FOX_konata  阅读(6)  评论(0编辑  收藏  举报