POJ-2155 Matrix 二维树状数组, HDU-3584 Cube 三维树状数组

Matrix 是一道需要在二维矩形范围修改和单点查询的题目。Cube 是三维情况下的扩展。
从一维的区间修改单点查询模型可以扩展到二维。用二维树状数组维护差分的矩阵,求和结果就是实际的单点元素值。
一维情况下给 (x, y) 区间加 v 可以执行 add(x, v) 和 add(y+1, -v);
二维下给 (x1, y1) - (x2, y2) 矩形范围加 v ,考虑容斥原理,可以执行

add(x1, y1, v);
add(x1, y2 + 1, -v);
add(x2 + 1, y1, -v);
add(x2 + 1, y2 + 1, v);

三维情况下给 (x1, y1, z1) - (x2, y2, z2) 立方体范围加 v ,又再复杂一些,画一个图多考虑一会可以得到

add(x1, y1, z1, v);
add(x1, y1, z2+1, -v);
add(x1, y2+1, z1, -v);
add(x2+1, y1, z1, -v);
add(x1, y2+1, z2+1, v);
add(x2+1, y1, z2+1, v);
add(x2+1, y2+1, z1, v);
add(x2+1, y2+1, z2+1, -v);

这两题的修改都是在 0 和 1 之间改来改去,可以看作是模2意义下的加减。因此修改操作都可以用加减法来模拟,最终输出结果模2即可。

多组数组的情况下记得每次重置数组,不然会出错。
还有可以只清理输入规模范围的数组,不用每次都把整个数组清空,避免 TLE。

你可能感兴趣的:(算法)