【证明过程】
因为,一维差分是一维前缀和的逆运算。即存在:
d[1]=a[1],d[i]=a[i]-a[i-1],i≥2 及 a[1]=d[1],a[i]=d[1]+d[2]+…+d[i],i≥2。所以:
• 对于 i<le,依据 a[1]=d[1],a[i]=d[1]+d[2]+…+d[i],i≥2,知 a[i] 不变(因 d[i] 没变)。
• 对于 le≤i≤ri,执行 d[le]+=x 前,a[i]=d[1]+d[2]+...+d[le]+...+d[i];执行 d[le]+=x 后,a[i] 等于 d[1]+d[2]+...+d[le]+x+...+d[i]=a[i]+x。即原数组 a 的区间 [le, ri] 中每个元素 +x。
• 对于 i>ri,且 ri+1≤n,n 为原数组 a 的元素个数,执行 d[le]+=x,d[ri+1]-=x 后,a[i] 等于 d[1]+d[2]+...+d[le]+x+...+d[ri]+d[ri+1]-x+...+d[i]=a[i]。即 a[i] 不变。
【验证过程】
示例:对原数组 a[]=[3 5 9 10 16 18 27] (下标从 1 开始)区间 [2,5] 中的每个数都加 3,等价于对其差分数组 d[] 执行 d[2]+=3,d[5+1]-=3。
解析:由 d[1]=a[1],d[i]=a[i]-a[i-1],i≥2 可得,原数组 a[]=[3 5 9 10 16 18 27] 的差分数组为 d[]=[3 2 4 1 6 2 9]。执行 d[2]+=3,d[5+1]-=3 后,原数组的差分数组由 d[]=[3 2 4 1 6 2 9] 变为 d[]=[3 5 4 1 6 -1 9]。显然,此时由关系 d[1]=a[1],d[i]=a[i]-a[i-1],i≥2,知:
a[1]=d[1]=3,
a[2]=d[2]+a[1]=5+3=8,
a[3]=d[3]+a[2]=4+8=12,
a[4]=d[4]+a[3]=1+12=13,
a[5]=d[5]+a[4]=6+13=19,
a[6]=d[6]+a[5]=-1+19=18,
a[7]=d[7]+a[6]=9+18=27。
易见,对原数组 a[]=[3 5 9 10 16 18 27] (下标从 1 开始)执行 d[2]+=3,d[5+1]-=3 后,原数组由 a[]=[3 5 9 10 16 18 27] 变为 a[]=[3 8 12 13 19 18 27],即原数组区间 [2,5] 内的每个元素确实都加了 3。
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/145609215
https://blog.csdn.net/hnjzsyjyj/article/details/132247279