CF 3000+
CF1981F / *3000
首先有朴素的 dp: 表示以 为根的子树已经 finish 了,经过 往上走的路径 MEX 为 。 的取值是 ,因为一共只有 个点。
转移的时候分情况,看看子树往上走的路径是在 断开还是继续向上延伸。如果有两个儿子还要考虑是否需要将两个向上走的链在 这里 merge 起来。
这个朴素 dp 是 的。但是根据直觉 MEX 不会很大。因此转移时第二维只转移到 。由于 CF 的神机,很轻松的就跑过了。
Proof:假设权值 出现了 次。对于一个序列,将每个 与其左右划分为一段,剩下的部分同样成段。这样一共能分出 段。
其中含有 的段 MEX (因为 一定不在序列中),含有 的段 MEX (因为段长为 )。
设 MEX 上界为 ,则有 。又 ,可以放缩一下,解得 。
由于 ,根据调和级数可以得到 ,也就是说 实际上是 级别的。题解说 。
CF1476F / *3000
怎么会有这么蠢的 CF *3000?
想一下,设 表示填满前 个需要的最少灯笼不好做。设 表示前 个灯笼能扩展的最长前缀。分情况转移:
-
:
-
:
-
向左与前面的前缀拼起来。设 为 的最小位置。
可以二分, 可以 RMQ。复杂度线性对数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示