[总结]CDQ分治&整体二分

本文探讨了CDQ分治和整体二分两种算法思想,包括它们的适用条件、经典应用实例以及与数据结构的结合。通过离线操作和对问题的动态转化,CDQ分治能解决动态问题,而整体二分则利用二分策略优化多次询问和修改。文章列举了如NOI2007货币兑换、BZOJ1176Mokia、BZOJ3262陌上花开等实例,并指出两者在解决K小值问题中的应用。
摘要由CSDN通过智能技术生成

从昨天到现在除了90%的颓废时间一直在研究一些分治的姿势,主要就是CDQ分治和整体二分。
首先推荐一些学习资料:
陈丹琦 《从 < Cash > 谈一类分治算法的应用》
许昊然 《浅谈数据结构题的几个非经典解法》
百度一下就可以get


CDQ分治

CDQ分治的关键在于,每个子问题不仅是解决它自身,并且用前一个子问题来求解后一个子问题。常用来将一些动态的问题转化到静态来解决,使问题处理起来更加方便。
使用CDQ分治需要满足一定的条件:

  1. 题目允许离线操作
  2. 修改操作对询问的贡献独立,且修改之间互不影响
  3. 修改对答案的贡献是确定的,与判定标准无关

NOI2007货币兑换是一个用数据结构维护DP决策的问题,它满足CDQ分治的条件。BZOJ1176Mokia是一个在线用数据结构维护一些数据信息的问题,我们可以转为离线操作,简化操作。BZOJ3262陌上花开是一个用数据结构维护三维偏序的问题,我们可以用CDQ分治来替代一维数据结构,避免写树套树这种二维数据结构。
CDQ分治在维护一些动态的凸包、半平面交问题也有一定应用,然而我这个计算几何幼儿园水平的连静态半平面交都不会,以后再学吧。


整体二分

二分是OI中常用的一种思想,如果对于有多次修改和多次询问的且答案满足二分性的题目,我们可以每次都二分来做。不过如果修改的答案对询问的贡献独立且确定,我们如果求出了某一部分修改对答案的贡献,则这一部分的贡献是不会变的,我们以后的询问中要避免这种重复的操作。
所以我们可以从整体来把握问题,不仅对答案二分,对询问也进行二分。
使用整体二分需要满足的条件:
1. 题目允许离线操作
2. 修改操作对询问的贡献独立,且修改之间互不影响
3. 修改对答案的贡献是确定的,与判定标准无关
4. 答案具有二分性

可见应用CDQ分治和应用整体二分的条件是很相似的,其实都是按照时间分治的方法,只是整体二分多了一个二分答案的过程。
BZOJ1901BZOJ2738矩阵乘法是两道关于 K <script type="math/tex" id="MathJax-Element-23">K</script>小值的问题,应用整体二分可以避免写一些烦琐的数据结构。BZOJ2527Meteors也是一道整体二分的题目。


匆匆补完了CDQ分治和整体二分,xhr论文中还提到了一个叫做二进制分组的东西,在维护分治问题的时候要善于用树状数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值