-
前缀和
- 一维数组的前缀和
对于数组 a[0] - a[n],如果求区间 L~R之间的数组和(0<=L<=n, 0<=R<=n),那么就是将a[L] 和 a[R] 之间的所有的数相加,但是如果提前知道前L项的和sum[L] 以及前R项的和 sum[R],那么所求的结果就是 sum[L] - sum[R]。这里sum[L] 以及sum[R] 就是前缀和。
- 二维数组的前缀和
如下图所示:设原数组为 a[5][5],表示二维前缀和的数组为 s[5][5]。
1、如果i==1,则 s[1][1] = a[1][1], s[1][j] += a[1][j], 1 <= j <= 5。
2、如果j==1,则 s[1][1] = a[1][1], s[i][1] += a[i][1], 1 <= i <= 5。
3、否则,s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j] 。比如 16 = 3 + 7 - 1 + 7。
- 二维前缀和的练习
-
差分数组
一个数组中的元素分别为:a, b, c, d
那么数组对应的差分数组为:a, b-a, c-b, d-c。
仔细观察差分数组可以发现有规律:a = a, b = a + (b-a), c = a + (b-a) + (c - b), d = a + (b-a) + (c-b) + (d-c)
-
应用
区间修改
单点查询
区间查询
-
学习
-
练习