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$了


 这份代码别看了,看下一题吧

posted @ 2017-02-23 23:52  Candy?  阅读(269)  评论(0编辑  收藏  举报