BZOJ 1176: [Balkan2007]Mokia [CDQ分治]
题意:
有一个n * n的棋盘,每个格子内有一个数,初始的时候全部为0.现在要求维护两种操作:
1)Add:将格子(x, y)内的数加上A.
2)Query:询问矩阵(x0, y0, x1, y1)内所有格子的数的和.
数据规模:操作1) ≤ 160000,操作2) ≤ 10000,n ≤2000000.
二维树状数组不行了...
每个询问拆成4个,然后所有操作按$x,op$排序
对时间进行$CDQ$分治
$CDQ(l,r)$过程中,用时间$(1,mid)$的$ADD$操作更新$(mid+1,r)$的$QUERY$操作,因为已经排序了,所以对$y$建立树状数组扫描统计一遍就好了
然后递归分治下去
$ZZ$又把$l$达成$1$了
这份代码别看了,看下一题吧
Copyright:http://www.cnblogs.com/candy99/