1.(一维)差分:
一种能够快速将区间 [l,r] 加或减同一个数的算法,适用于多次修改,1(少量)查询的题目。
一个差分数组的第i项存储的是它与前一项的差,差分数组的前缀和等于原数组。
a(原数组): 1 3 6 4 9 11 3
d(差分) : 1 2 3 -2 5 2 -8
sum_d(前缀和):1 3 6 4 9 11 3
更改区间 [l,r] 只需将 d[l]+=k,d[r+1]-=k;即可。
2.二维差分:
类似一维,d[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1];
更改(x1,y1),(x2,y2)区间时,d[x1][y1]+=1,d[x2+1][y1]-=1,d[x1][y2+1]-=1,d[x2+1][y2+1]+=1;
查询时,算前缀和即可。(sum_d[x][y]=sum_d[x-1][y]+sum_d[x][y-1]-sum_d[x-1][y-1]+d[x][y])