20200724训练记录
三道神仙题我直接爆零
A题发现选择左括号还是右括号都是一次会把一个连续段全部选完
发现可以变成这样的pair(a,b)表示先\(-a\)再\(+b\)
感觉可以像【集训队作业2018】三角形一样贪心,但是有强制的先后顺序就很zb
看题解发现可以把两个序列合并一下
就是两个pair如果后面比前面劣那么选了前面马上就会选后面那个
于是就把两个pair合并在一起
这样以后两个序列就是从优到劣了
像归并排序一样并起来搞就行了
B题数序列没啥思路只是知道要二项式反演一下
题解说其实至少\(i\)个\(<\)其实等价于有\(n-i\)个内部全是小于的连续段
这个连续段的生成函数很好求,就是
\[f(x)=\sum_{i>=1} \binom{m}{i}*x^i=((x+1)^{m}-1)
\]
于是对于至少\(i\)个而言答案可以表示成
\[\sum_{n}[x^n]f(x)^{n-i}
\]
这还是不好算
于是题解神仙转化把它变成等比数列
\[\sum_{n}[x^N]f(x)^{n-i}*x^{N-n}
\]
也就是
\[[x^N]\frac{f^{N+1-i}-x^{N+1-i}}{f-x}
\]
这里需要用一次多项式求逆
这样就可以继续推了
颓亿一会式子发现只需要一次卷积就可以搞定了
C题树上选不相交的x条边
考虑dp
设f[i][j][0/1]表示i的子树中选了j条,与i相连的边是否被选中过
直接dp是\(O(n^3)\)的
考虑这个dp数组是上凸的于是就可以用闵可夫斯基和实现两个dp数组\(O(长度和)\)的合并
但暴力dp还是\(O(n^2)\)的
考虑类似动态dp的做法优化
每个点先只和自己的所有轻儿子合并
这里合并用分治合并是\(O(\sum log\sum)\)的
在重链顶端合并这条重链上所有点及其轻儿子的信息
再算上重链上的边
同样是分治合并\(O(\sum log \sum)\)
注意到一个点到根只有\(O(logn)\)条重链
所以一个点贡献的合并量是\(O(logn)\)级别的
总复杂度是\(O(nlog^2n)\)