- 差分算法是前缀和算法的逆运算,可以快速对数组的某个区间进行计算
一维差分
- 1、构造差分数组:b[i] = a[i] - a[i - 1]. (对于每一个 a[i], 都有 a[i] = b1 + b2 + b3 + … + bn)
- 2、将原数组中 [l, r] 之间的每个数加上 c:b[l] += c, b[r + 1] -= c.
- 3、原数组更新:a[i] = a[i - 1] + b[i].
二维差分
- 1、构造差分数组:b[i][j] = a[i][j] - a[i - 1][j] - a[i][j - 1] + a[i - 1][j - 1]. (原数组可以看作是差分数组的前缀和数组)
- 2、将选中的子矩阵中的每个元素的值加上 c:b[x1][y1] += c, b[x1][y2 + 1] -= c, b[x2 + 1][y1] -= c, b[x2 + 1][y2 + 1] += c.
点此查看上图来源 - 3、原数组更新:a[i][j] = a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1] + b[i][j]. (相当于对差分数组求前缀和)
If you have any questions,please feel free to communicate with me.