适合解决的问题
n个数字,m次操作,每一次操作都给定区间和数值([l,r]+del),最后q次询问,问[l,r]的数值或者单点的数值.
差分数组的定义
//当前位置与上一个位置的差值
for(int i-0;i<n;i++)
{
d[i]=a[i]-a[i-1];
}
容易发现d[i]的累加就得到原来的数组a[i]:d[i]=a[i]-a[i-1],d[i+1]=a[i+1]-a[i],所以不断往前循环,得到a[i]=d[1]+…+d[i]
同样,如果分别将a[i],b[i]进行前缀和操作那么a[i]得到的前缀和数组就是b[i]的二阶差分数组,对应的每一个项相差为前面的a[i-1]项的前缀和?推出来的。
我们在差分数组的区间修改数值,可以想象成为在d[i]-del,在d[y+1]+del,这就是整个区间的修改