一维前缀和:
预处理:sum[i]=sum[i-1]+a[i];
查询:sum[r]-sum[l-1]
二维前缀和:
预处理:s[i] [j] = s[i-1][j] + s[i][j-1 ] + a[i] [j] - s[i-1][ j-1]
查询:以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:
s[x2, y2] - s[x1 - 1, y2]
- s[x2, y1 - 1] + s[x1 - 1, y1 - 1]
对于区间(l,r)
一维差分:
预处理:b[i]=a[i]-a[i-1];
查询:b[l] + = c, b[r+1] - = c
二维差分:
预处理:b[i][j]=a[i][j]−a[i−1][j]−a[i][j−1]+a[i−1][j−1]
查询:已知原数组a中被选中的子矩阵为 以(x1,y1)为左上角,以(x2,y2)为右下角所围成的矩形区域;
b[x1][y1] + = c;
b[x1,][y2+1] - = c;
b[x2+1][y1] - = c;
b[x2+1][y2+1] + = c;