<span>noi前第十三场 题解</span>

A. 钩子

可以发现大概问题是一层一层的。
对于每一层,一定会选完所有长度为 \(2x,2x-1\) 的连续段之后递归下一段。
可以考虑将这样的选择合并在一起考虑,然后做一个 \(dp\)
可以发现概率的大小大概只与剩下的奇数、偶数段的个数有关,所以记录奇数段的个数就可以转移了。
然后的问题是怎么继续考虑下一层。
比较简单的是奇数段,只要选中间一个点就好了。
对于偶数段,选择两种可能都是可以的。
但是容易发现这样的事情:不同的段之间不会相互影响,相同段的左右两半是对称的。
所以可以钦定这次的选择是偶数段的靠左的中点,在递归结束之后对所有答案按照对称轴取个平均数就好了。
 

B. 加减

首先写出一个简单的 \(dp\)\(f_{i,j}\) 表示前 \(i\) 个里选了 \(j\) 个的最大收益。
打表之后可以很容易的发现,这个函数是凸的,并且转移也是凸的。
所以可以写个无旋 \(treap\) 合并,然而常数大的飞起。
其实是一个不难的做法,因为函数是凸的,然后进行的操作是取 \(max\),关注的信息也不多。
大概可以想到分治之后进行类似闵可夫斯基和的东西,其实就是差分归并再做一遍前缀和。
 

C. 树高

大概的思想是,首先把染色点转化为染色与它父亲的边。
然后可以发现,一个染色操作最多造成联通块个数变化 \(1\)
这也就是说合并的总次数是线性的。
然而显然直接转化并不正确,仔细观察一下。
其实不合法的情况仅当最上面一个点不联通。
可以找到最上面的点,之后的情况会形成一段连续的区间。
对于合并操作,其实一定是父亲与儿子的合并,其实写一个 \(ETT\) 就可以支持这样的交换子树的操作。

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务