一,抄网上的,我觉得挺不错的。
一道题来引入前缀和的概念
要求一个数列某一区间 [ l,r ] 内的数字的和,我们可以用[ 0,r ]的和减去[ 0,l ]的和,这样计算的话,只需要用一个数组去记录到某一个下标为止的,之前所有数字的和就可以了。
int c[100];//c[i]记录从起点到c[i]的和
c[0]=arr[0];
for(int i=1;i<n;i++){
c[i]=c[i-1]+arr[i];
}
1
2
3
4
5
于是我们求[l,r]可以转换为
c[r]-c[l]
1
差分就是前缀和的逆运算
对于一个数组d[100]
d[i]=arr[i]-arr[i-1];
差分可以通过单点更新进行区间求和
通俗来讲就是说对区间内某一点进行更新,可以通过求从开始到i之前区间和求出d[i]
贴一道题