差分
差分的概念
已知原数组a[i],差分数组b[i]
有以下公式:
b[i]=a[i]-a[i-1]
a[n]=b[1]+b[2]+...b[n]
思路
将序列中[l, r]之间的每个数加上c,使用差分数组,因为差分数组只需要修改一个b[i],a[i],a[i+1]…就会自动加上
而r右侧的只需要b[r+1]减去c即可
代码
#include<iostream>
using namespace std;
int a[100005];
int b[100005];//差分数组
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i]-a[i-1];
}
int l,r,c;
while(m--){
cin>>l>>r>>c;
b[l]+=c;
b[r+1]-=c;
}
for(int i=1;i<=n;i++){
b[i]=b[i]+b[i-1];//计算差分数组的前缀和,并赋给差分数组
cout<<b[i]<<" ";
}
return 0;
}