码迷,mamicode.com
首页 > 其他好文 > 详细

模板:CDQ分治

时间:2017-12-14 21:16:48      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:nlog   style   span   难度   转化   干什么   das   纪念   之间   

CDQ分治不是一个顾名思义的东西,CDQ是为了纪念神犇陈丹琦而命名的一种算法。

那么CDQ分治能干什么?它通常用于将在线的问题变为离线问题以此来减少代码实现难度(但同时意味着你的时间复杂度升高)

——————————————

算法描述:

首先CDQ必须满足的条件:

1.修改操作对询问的贡献独立,修改操作之间互不影响效果。

2.题目允许使用离线算法。

然后我们正式开始CDQ分治。

首先我们对询问和修改队列二分,我们就能发现:

1.后半队列对前半队列的操作无影响。

2.后半队列中的询问仅受前半队列操作和它之前的后半队列的操作。

首先对于前半队列,由1可知它没有任何限制,那我们就递归之。

对于后半队列,明显后半队列的修改操作不受前面操作的影响。

那么对于后半队列的询问操作,由2可知该问题完全被转化为了“给定一些操作后进行询问”的静态离线问题,这样极大地降低了我们的编程难度。我们设这个操作的复杂度为O(n)。

而我们所搜的深度为O(logn),所以时间复杂度为O(nlogn)。

————————————————————————

例题

BZOJ3262:陌上花开 & 洛谷3810:三维偏序——题解:http://www.cnblogs.com/luyouqi233/p/8039450.html

模板:CDQ分治

标签:nlog   style   span   难度   转化   干什么   das   纪念   之间   

原文地址:http://www.cnblogs.com/luyouqi233/p/8039317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!