CF 3000+

CF1981F / *3000

首先有朴素的 dp:fu,i 表示以 u 为根的子树已经 finish 了,经过 u 往上走的路径 MEX 为 ii 的取值是 [1,n+1]Z,因为一共只有 n 个点。

转移的时候分情况,看看子树往上走的路径是在 u 断开还是继续向上延伸。如果有两个儿子还要考虑是否需要将两个向上走的链在 u 这里 merge 起来。

这个朴素 dp 是 O(n2) 的。但是根据直觉 MEX 不会很大。因此转移时第二维只转移到 5000。由于 CF 的神机,很轻松的就跑过了。

Proof:假设权值 i 出现了 si 次。对于一个序列,将每个 i 与其左右划分为一段,剩下的部分同样成段。这样一共能分出 2si+1 段。

其中含有 i 的段 MEX i(因为 i 一定不在序列中),含有 i 的段 MEX 4(因为段长为 3)。

设 MEX 上界为 t,则有 min{(si+1)i+4si}t。又 min{(si+1)i+4si}<min{(si+1)i+4(si+1)},可以放缩一下,解得 siti+41

由于 si=n,根据调和级数可以得到 n=O(tlnt),也就是说 t 实际上是 O(nlnn) 级别的。题解说 t=3863

CF1476F / *3000

怎么会有这么蠢的 CF *3000?

想一下,设 fi 表示填满前 i 个需要的最少灯笼不好做。设 fi 表示前 i 个灯笼能扩展的最长前缀。分情况转移:

  • fi1<ififi1

  • fi1>ifimax{fi1,i+pi}

  • i 向左与前面的前缀拼起来。设 tftipi 的最小位置。fimax{i1,maxt<j<i{j+pj}}

t 可以二分,max{j+pj} 可以 RMQ。复杂度线性对数。

posted @   Link-Cut-Y  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示