像潮落潮涌,送我奔向自由。|

寂静的海底

园龄:3年2个月粉丝:58关注:15

进行一个脑的补

我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。

很多时候有意义的状态是不多的或是呈现某种特殊分布的,特此记录一些很需要脑子的东西。

当你发现一个 n2 的可行性 dp,而且没办法优化时,常见的办法是维护点集,点集有很多常见的姿态需要发现,当然,这种 维护点集 的技巧 ,不仅限于用在维护 dp 数组上。

  • 区间(介值定理记录 minmax)

  • O(1),O(log),O(n)个区间,这个时候一般可以暴力维护一些没那么好做的操作

  • 每次如果可行点数是向两边 O(1) 的就要考虑是不是区间。

eg. 每步做一次区间赋值 0 或 1,做完后所有 1 向两边扩展 1,这个段数就是 n 的。

eg. CF1852D,因为扩展到另一侧再扩展回来会把 +2 造成的空给填充,所以最多只有 2 个区间。

  • O(n) 个区间,这个时候一般要使用平衡树等数据结构维护

eg. CF1415F 分别维护二人拿这个蛋糕时另一个人的可行区间,每次新增的区间都包含 ai,所以会合并成一个区间,可以证明区间总量 O(n)

  • 一个数的所有倍数

这个时候有可能会涉及一些数论知识或者调和级数的复杂度。

  • 值域本身就是 O(n) 或者 O(logn) 的。

比较常见,但是有时候很难发现。

出现的原因常常是转移中出现了二次项,且值域上限为 n,或是转移出现了使某个值至少翻倍或成某比例变大。

eg CF354D CF1830D ABC203F

  • O(logn) 个等差数列

痛 苦 面 具

往往涉及 border 理论和 palindrome series 会涉及。

有时候要根号分治维护。

  • 整线段 + 若干散点

很怪。 往往在涉及到 max/min 或者相关分情况讨论的时候可能会出现。

eg CF1500F 维护可行的 dp 值,每层会新增一个区间,若干散点,我也不知到怎么 可以发现, 出现新增区间的时候一定会合并一堆区间。

posted @   寂静的海底  阅读(7)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起