标签:
CDQ分治
[BOI2007]MOKIA
题意:一个2000000*2000000的棋盘,每个格子有一个数,维护两种操作:
ADD x, y: a A[x, y] += a;
QUERY x0, y0, x1, y1: 询问矩阵内的和。
CDQ分治时按x维排序使用扫描线,y维使用树状数组。每个询问拆成两部分,(x0, y0, y1)与(x1, y0, y1)。
扫描到x0时,贡献为负,ans -= sum(y0, y1), 扫描到x1时贡献为正,ans += sum(y0, y1)。
[VIOLET3]天使玩偶
维护二维点集。1.插入点(x, y),2.询问离(x, y)曼哈顿距离最近的点的距离。
CDQ分治需要分类讨论。左下,左上,右下,右上部分点的最近点。以左下为例。即求左下中x+y的值最大的点。
无1操作时,按x维排序,树状数组处理。
有1操作时,CDQ分治时按x维排序,处理同无1操作。
三维偏序统计问题。参见上一篇博文。
四维偏序simle版判定。
四维的点集。判断每个点是否存在一个点比它大。大的定义为四维中任意一维都比它大。
考虑对任一点,是否存在某一点四维都比它小。
按第一维排序后,有了时间限制。等价于任一点,排在前面的点是否存在其他三维都比它小。
因为是判定性问题,我们可降一维,判断第二维与第三维比它小的点中第四维的最小值,改为非判定性问题。
可用CDQ分治再降一维。
CDQ分治时按第二维排序,第三维使用树状数组,求前缀最小值即可。
四维偏序normal版统计
四维的点集,求最长上升子序列,即求每个点比它小的点的个数。
两次CDQ分治。不会。
五维偏序统计
四维的点集,求最长上升子序列,即求每个点比它小的点的个数。
三次CDQ分治?多了两个log常数大,性能可能不及O(n^2)。
[FJOI2012]长度为N的数组开始为空。每次执行操作Pi, Qi, 表示在Pi位上填上Qi,输出每次操作后的逆序对数。
CDQ分治,合并统计时可离散化+树状数组搞一下即可。
还有DP上的CDQ分治,没有学,道理类似。
===========================================================================================================
总结:
CDQ分治是基于时间分治。
在线问题离线化。
CDQ分治后可降维。
标签:
原文地址:http://www.cnblogs.com/dirge/p/5803635.html