CDQ分治与斜率优化DP——学习笔记

我们知道当斜率优化DP中的点的x坐标不单调时,需要splay来维护凸壳,但是代码量比较大,容易写挂。
我们还有一种神奇的做法:CDQ分治。
先把n个状态排成一个序列。考虑一个分治过程solve(L,R),每次分成[L,mid],[mid+1,R]两部分。
显然对于fi只和1~i-1有关,所以我们solve(L,mid)递归求解,即可得到[L,mid]的所有f值。
现在我们需要考虑用[L,mid]中求出的值去更新[mid+1,R]中的待求的f:
这个子问题已经是静态的了,然后我们就可以排序了。
对于[L,mid]中的所有决策点按x排序,然后就可以线性构造出这个凸壳。
再对[mid+1,R]中的状态按斜率排序。这样又能线性在凸壳中找到最优点。是不是很妙啊。
总复杂度O(Nlog^2N)。虽然多了一个log, 但是编程复杂度降低了很多,对于写不动大数据结构的老年人选手是很好的选择。
CDQ分治的这种动态转静态的思想特别好,许多数据结构题都适用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值