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