和普通分治的区别
普通分治是左、右两边各处理各的,然后合并一下结果;
cdq分治是左、右两边各处理各的之后,再处理某一半区间对另一半区间的贡献。
编程技巧
sort
排序可以放到最后,以优化时间复杂度,比如:
1 2 3 4 5 6 7
| void cdq(int l, int r) { if (l == r) return; int mid = (l + r) / 2; cdq(l, mid), cdq(mid + 1, r); ... sort(a + l, a + r + 1, cmpx); }
|
练习题