cdq分治总结

cdq分治是一种具体的思想,主要用于一下几种情形中:

1.解决和点对有关的问题

摘自 oi-wiki ,简言之,我们就是分治处理点对,重点在如何处理横跨mid的点对

【例题】P3810 【模板】三维偏序(陌上花开) 

        我们首先按照x维度排序,然后问题就变成二维了,然后我们递归处理(l,mid)和(mid+1,r)内的点对,然后处理横跨mid的点对,我们把左半部分和右半部分按照y维度排序,这样就可以双指针了,利用树状数组查询,设右半部分的指针为i,左半部分的指针为j,如果y[j]<=y[i]那就不断把z[j]加入树状数组,然后询问小于等于z[i]的个数即可  代码

【练习】P3157 [CQOI2011]动态逆序对 

         经典的三位偏序问题  代码

2.用于斜率优化dp

        当x和k均不单调时,我们需要用splay去维护下凸壳,或者是从cdq分治来解决这个问题

        我们分治处理[l,r]的区间时,可以利用归并排序将[l,mid]维护成x单调,[mid+1,r]维护成k单调,这样问题就回归成了我们熟悉的斜率优化dp,可以直接通过单调栈+单指针往后走即可

        斜率优化总结

        P4655 [CEOI2017]Building Bridges 

        很裸的斜率优化,直接套用cdq斜率优化dp即可  代码

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值