分治算法

CDQ分治:

中心思想:

按照偏序(时间可以作为偏序)分治,不断递归处理前一半元素对后一半元素的贡献,这样把问题转成了一个个先插入后修改的子问题,把动态修改问题转成静态问题(常常在每一层处理的时候用对询问(或修改)排序等方式消掉原本动态修改不能消掉的限制,再静态解决)。

整体二分:

中心思想:

单次询问要满足可二分性,但是\(check\)复杂的很高,而且可以在预处理完后复杂度很低的单次判断,从而可以把所有询问一起二分,得到答案。

具体做法:

\((l,r)\)表示答案(输出结果)的范围,\((L,R)\)表示答案在\((l,r)\)范围内的询问的范围。每次二分答案,把所有\((L,R)\)中的询问都\(check\)一遍,判断是在左区间还是右区间。

对时间分治:

按照时间分治,先把操作都变成有一个存活的时间区间,然后在时间结构上区间修改,最后遍历时间结构并修改,遍历到叶子结点(时间点)时信息便是当时的,询问即可。

注意:

分治的时候先递归,再归并排序,少一个\(log\),对所有操作都排序,在开始的时候记一下\(wz\),就可以统计\(mid\)前对\(mid\)后的操作了。

转载于:https://www.cnblogs.com/Smeow/p/10582633.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值