前缀和
什么是前缀和
前缀和是一种预处理技术,通过计算数组的前缀和数组,可以在常数时间内快速计算任意子数组的和。前缀和数组 prefix 定义为:
一维前缀和
对于一个一维数组 arr,前缀和数组 prefix 的计算方法如下:
plaintext
1 | vector<int> prefix(n + 1, 0); |
这样可以轻松计算从arr[l]到arr[r]的和,即prefix[r]-prefix[l-1]
二维前缀和
对于一个二维数组 arr,前缀和数组 prefix 的计算方法如下:
plaintext
1 | vector<vector<int>> prefix(n + 1, vector<int>(m + 1, 0)); |
通过前缀和数组,可以快速计算任意子矩阵 [x1, y1] 到 [x2, y2] 的和:
sum(x1,y1,x2,y2)=prefix[x2][y2]−prefix[x1−1][y2]−prefix[x2][y1−1]+prefix[x1−1][y1−1]
前缀和的应用
- 子数组和
- 子矩阵和
- 区间查询
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ing的博客!