CDQ 分治学习笔记

鲜花

开新坑。
早该卷卷了。

集训队论文自认为写的很清晰。
感觉对于一道自己进集训队时的国赛题能发明一种新做法很牛啊!

简述

CDQ 分治是一种离线分治做法。
CDQ 分治并没有很固定的模板,这是一种分治思想的延伸。

对于一道带修的数据结构问题,我们可以将每个查询视作其之前修改对其造成影响的结果。
因此我们可以用一个数据结构进行初始化和所有修改后再进行查询其结果。

假设一个数据结构问题中有修改和查询的操作共 \(m\) 个。
solve(l,r) 函数为解决对于任意在操作 \(l\)\(r\) 中的任意查询 \(i\),计算 \(\left[l,i\right)\) 对其造成的影响。
因此 solve(1,m) 即为我们的此题的目标。
solve(l,r) 中,令 \(mid=\left\lfloor\dfrac{l+r}{2}\right\rfloor\),先执行 solve(l,mid)solve(mid+1,r),之后再考虑 \(\left[l,mid\right]\) 中的修改对 \(\left[mid+1,r\right]\) 中查询的影响。
以上即为 CDQ 分治的大体思路。
\(\left[l,mid\right]\) 中的修改对 \(\left[mid+1,r\right]\) 中查询的影响是解题的一个关键,有时也会运用 solve(l,mid)solve(mid+1,r) 中的计算进行合并(如集训队论文中的 Cash 中的归并排序)。

例题

在写了。

posted @ 2024-10-24 18:19  LiJoQiao  阅读(15)  评论(0编辑  收藏  举报