CDQ分治&&整体二分

11 篇文章 0 订阅
2 篇文章 0 订阅

CDQ分治本质就是分两半,分别计算两边区间的贡献,然后再考虑跨区间的贡献。
具体教程网上一搜一大把……
题单:
51nod 1376 :https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1376
考虑用 f【i】记录以i结尾的最长上升子序列的长度&&个数,然后每次切两半,先计算【l,mid】的答案,然后按照原数组a的值进行排序,从前往后扫,如果下标在前一半区间则更新一个前缀最优值,如果是后一半则进行更新。然后递归做右半边即可。
代码:https://paste.ubuntu.com/p/PKsVJnGN9P/
注意该题是先考虑左边,然后考虑跨区间,再考虑右区间。

bzoj1176:https://www.lydsy.com/JudgeOnline/problem.php?id=1176
首先把询问拆成四个差分一下,一开始先对操作按照x、y排一下序,然后每次二分操作时间mid,<=mid的操作进行更新,>=mid的询问贡献答案,然后递归即可。
代码:https://paste.ubuntu.com/p/GNjrzYJ44B/

然后是鬼畜的整体二分~~~
就是把所有询问放在一起,如果答案<=mid则被分到左边,>mid则消去前面区间的贡献,然后分到右边。继续递归做即可。
bzoj2376&&洛谷1527
整体二分第K大的数mid,将>mid的数所在位置+1,然后询问矩形内1个数cnt<=K则分到左边,>K则减去cnt,然后分到右边。递归处理即可。
代码:https://paste.ubuntu.com/p/KbD82tXtRG/

bzoj3110
整体二分套个区间修改&&查询的树状数组即可。
代码:https://paste.ubuntu.com/p/G2bdFH8JyY/

luogu2617
带修区间第K大,类似做法。
代码:https://paste.ubuntu.com/p/9Kr3j93X8P/

bzoj2527&&luogu3527
裸题。
代码:https://paste.ubuntu.com/p/9Kr3j93X8P/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值