路西法,前缀和:不明所以
二维前缀和
Lucifer 二维的写得比一维的清晰
- 简单二维前缀和的求解 基于
容斥原理
二维前缀和转化为一维前缀和 (遍历矩阵所有的以第一行为上端
的区块和)
先不考虑行之间的关联,而是预先计算出每一行的前缀和。对于计算每一行的前缀和就是一维前缀和啦。接下来通过固定两个列的端点的方式计算每一行的区域和。代码上,我们可以通过三层循环来实现, 其中两层循环用来固定列端点,另一层用于枚举所有行。
1 | # 预先构建行的前缀和 |
1 | # 固定列的两个端点,即枚举所有列的组合 |
上面代码做的事情形象来看,就是先在水平方向计算前缀和,然后在竖直方向计算前缀和,而不是同时在两个方向计算。