码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ3132 上帝造题的七分钟

时间:2015-03-03 08:37:50      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

矩阵修改矩阵求和的裸题

 

参考 wyl8899《树状数组维护区间和的模型及其拓广的简单总结》一文。

树状数组在进行区间操作的时候维护一个查分数组 d 。 d[i] = a[i] - a[i - 1]。 这样单点询问就是 ∑i = 1 … x d[i]

区间询问的时候, 询问 1 … x 的区间即要求 ∑i = 1 … x (d[i] * (x - i + 1)), 即 (x + 1) * ∑(d[i]) - ∑ (d[i] * i)。 所以说只要多维护一个 d[i] * i 的树状数组就可以了。

 

很容易拓展到二维:矩阵修改的时候, 类似地, 开一个 d[i, j] 表示 从(i, j)到 (n, m) 的这个矩阵的增量, 修改(x1, y1  ,  x2, y2)这个矩形即令 d[x1][y1] += c; d[x1][y2 + 1] -= c; d[x2 - 1][y1] -= c; d[x2 + 1][y2 + 1] += c; 就可以了。

询问(1,1  ,  x, y)的时候, 也可以求出一个式子 ∑(i=1…x, j=1…y)d[i][j] * (x - i + 1) * (y - j + 1)。 整理得 (x + 1) * (y + 1) * ∑(d[i][j]) - ∑(d[i][j] * i) * (y + 1) - ∑(d[i][j] * j) * (x + 1) + ∑(d[i][j] * i * j) 。 把这四个数全都维护起来就好了 ^_^

BZOJ3132 上帝造题的七分钟

标签:

原文地址:http://www.cnblogs.com/lixintong911/p/4310096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!