Sol
- 考虑每个位置有个被最早染黑的时间,求的就是这些时间的第 大
容斥一下,就是求
其中 是不包含集合 的区间个数,考虑 表示当前选到 ,, 的方案数,状态很少 可以通过 - 考虑一个复杂度更好看但肯定跑不过 的做法,我们先把转移写出来
考虑写成这样的形式
代入 个点值就可以插出原多项式,注意到我们强制在最后放一个 ,那么只需要对 共 个多项式进行 ,复杂度
回到上面的转移,发现是个卷积的形式,即
由于代的是点值,所以 可以预先算出来
我们将 ,点乘转移,复杂度
考虑最后只需要知道 的系数,所以我们只需要对 暴力 回去
所以可以在 的时间解决这个问题
- 考虑如何暴力,我的做法是记录 表示 的子树,从 接上来一条还没有匹配的链( 表示 向上的边断掉)
发现当 时,会将每个子树的 值乘上 然后合并上去(用线段树合并简单维护)
当 时,先考虑子树中一个点和 拼接,可以在线段树中查询 某个值的 和还有一个 的系数,考虑两个子树的拼接,假设 的 有 个 - 当 时不存在这种情况
当 时,两个都必须选才会有值,必定存在一个轻儿子,我们 那个轻儿子
当 时,它必须选,若它是重儿子,我们 所有轻儿子,否则我们 除它以外的轻儿子,然后 它自己与重儿子拼接
当 时, 所有轻儿子并考虑与前面的拼接, 完后将它的线段树合并上去
- 以下是原问题的,卡特兰数用表示,我们对个置换统计不动点个数
- 容易发现,当为偶数时,置换个数必须为偶数
当为奇数时,对角线可能匹配,此时的不动点个数是
设环的个数为,环的大小为,考虑求出表示有个环的方案数
我们枚举与 1 号相连的点,它们中间的连边方式为,并且可以确定个环的连边方式,于是有
由可以得到
将其泰勒展开可以知道,所以可以计算答案