前缀和与差分
前缀和与差分
前缀和
一维前缀和
s[i]代表前i个数的和
1 | S[i] = a[1] + a[2] + ... a[i] //前缀和初始化,边界s[0]=0 |
二维前缀和
S[i, j] = 第i行j列格子左上部分所有元素的和
以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]
1 | for (i = 1; i <= n; i++){ |
差分
一维差分
初始化
1 | b[0] = a[0] |
给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c
我的理解,就是[l,]区间的数加上了c,[r+1]区间的数减了c,最后就是[l,r]加上了c,这样更好理解二维差分
1 | public void insert(int[] b, int l, int r, int c){ |
二维差分
给以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上c:S[x1, y1] += c, S[x2 + 1, y1] -= c, S[x1, y2 + 1] -= c, S[x2 + 1, y2 + 1] += c
S[x1, y1] += c表示给(x1,y1)右下角矩阵所有元素加上c
1 | public void insert(int[] b, int x1, int y1, int x2, int y2, int c){ |
- 標題: 前缀和与差分
- 作者: sdjasj
- 撰寫于: 2022-02-19 20:31:11
- 更新于: 2023-01-11 10:16:57
- 連結: https://redefine.ohevan.com/2022/02/19/前缀和与差分/
- 版權宣告: 本作品采用 CC BY-NC-SA 4.0 进行许可。
留言