差分数组C++

差分数组在数组某一段数值同乘以一个值,或者求某数组的前n项和非常方便

int a[] = {0,1,2,3,4,5};
b[i] = a[i] - a[i-1];(1<i≤n,b[1]=a[1],a[0] = b[0] = 0)

b[ ] = {0,1,1,1,1,1}
则称b[ ]是a的差分数组,它具有的性质是a[i] = b[i] + b[i-1] + … + b[1];

如果要在数组a的【x,y】区间上每个元素加上z,那么只要修改b[x] 和 b[y+1]这两个值
也就是:

b[x] += z;
b[y+1] -= z;

除此之外,我们还有

f[i]=f[i-1]+d[i](1<i≤n,f[1]=d[1]=a[1]);

sum[i]=sum[i-1]+f[i](1<i≤n,sum[1]=f[1]=d[1]=a[1])

所以 s u m [ i ] = a [ i ] sum[i] = \sum a[i]

在这里插入图片描述

发布了372 篇原创文章 · 获赞 48 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/dghcs18/article/details/104303271