高维前缀和
惊喜地发现另外一种求前缀和的方式,转来粘这,感谢这位大佬的学习笔记,
[学习笔记]高维前缀和
PS:(现在更倾向于楼上的惊喜方法)
附.三维前缀和 O(N3*23)的写法
S(X, Y, Z) = a(X, Y, Z)
+S(X, Y, Z - 1) + S(X, Y - 1, Z) + S(X - 1, Y, Z)
-S(X, Y - 1, Z - 1) - S(X - 1, Y, Z - 1) - S(X - 1, Y - 1, Z)
+S(X - 1, Y - 1, Z - 1)
便于记忆的方法:二进制001——111,奇数个(-1)则为正号。(总共2t个加数咯,算上本身嘛)
@奇数则为加
| S(X, Y, Z) = a(X, Y, Z) + | 表示 |
|---|---|
| 001 符号:+ | S(X, Y, Z - 1) |
| 010 符号:+ | S(X, Y - 1, Z) |
| 011 符号:- | S(X, Y - 1, Z - 1) |
| 100 符号:+ | S(X - 1, Y, Z) |
| 101 符号:- | S(X - 1, Y - 1, Z) |
| 110 符号:- | S(X - 1, Y - 1, Z) |
| 111 符号:+ | S(X - 1, Y - 1, Z - 1) |
三维差分8个式子
@与第一行相同的情况(奇数、偶数个1),则符号与第一行相同,此时即奇数则为负
| 二进制 | 表示 |
|---|---|
| 000 | ——————————————B(X1, Y1, Z1) += C ——使该立方体全部加上常数C |
| 001 | B(X1, Y1, Z2 + 1) -=C |
| 010 | B(X1, Y2 + 1, Z1) -= C |
| 011 | B(X1, Y2 +1, Z2 + 1) += C |
| 100 | B(X2 +1, Y1, Z1) -= C |
| 101 | B(X2 + 1, Y1, Z2 + 1) += C |
| 110 | B(X2 + 1, Y2 + 1, Z1) += C |
| 111 | B(X2 + 1, Y2 + 1, Z2 + 1) -= C |
459

被折叠的 条评论
为什么被折叠?



