CPP教程-前缀和与差分
C++教程
差分与前缀和是在优化数组存储时的主要的方法,下面我们来了解它们
前缀和
以下是两个数组
1,2,3,4, 5 //原数组
1,3,6,10,15 //前缀和处理
我可以明确的告诉你这就是前缀和
看出来了吗?前缀和数组a[n]
就等于原数组b[n]
项(含)前面的所有项目的和
放在递推里可以这样写
a[1]=b[1];
for(...){
a[i]=a[i-1]+b[i];
}
那么前缀和有什么用呢?
他可以让我们更快的读取数组区间的和
以一维数组为例:
要求数组b[n~m]
项的和ans
,可以这样写
//a[]是b[]的前缀和数组
ans=a[m]-a[n-1];
差分
照样是两个数组
1,2,5,4,6
1,1,3,-1,2
有一点乱,但没关系,差分数组a[]
和原数组b[]
规律就是
a[n]=b[n]-b[n-1]
即是原数组的对应项与前一项的差
那么差分有什么用呢?
他可以让我们更快的改变数组区间内的值(同操作,如都+2)
如果要把b[n~m]
的项目都+2
怎么办呢?
a[n]+=2;
a[m+1]-=2;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ocean!