目录
1.一维前缀和
1.1 一维前缀和的定义
对于一个一维整型数组a而言,定义一个一维前缀和数组prefix,满足:
prefix有一个重要的特性,可用于快速生成prefix:
1.2 一维前缀和的实现
利用前面讲过的特性:
我们的数组下标均从1开始,a[0] = 0,从前往后循环计算即可。
for(int i=1; i<=n; i++){
prefix[i] = prefix[i-1] + a[i];
}
1.3 一维前缀和的应用
一维前缀和用于求数组a的一段区间的和:
2. 一维差分
2.1 一维差分的定义
对于一个一维整型数组a而言,定义一个一维前缀和数组diff,满足:
对差分数组做前缀和可以还原为数组:
2.2 一维差分的实现
我们的数组下标均从1开始,a[0] = 0,从前往后循环计算即可。
for(int i = 1; i <= n;i++){
diff[i] = a[i] - a[i-1];
}
2.3 一维差分的运用
利用差分数组可以实现快速的区间修改,下面是将区间都加上x的方法:
diff[r] += x;
diff[l+1] -= x;
在修改完成后,需要差分数组做前缀和恢复为原数组,这样就实现将区间都加上x。