先假定a数组最开始都是0,那么b数组初始时全是0就已经是a数组的差分数组,对于每个读入的a[i],相当于插入了a[i]这个值,直接调用insert函数进行修改
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int n,m;
void insert(int l,int r,int c){
b[l]+=c;
b[r+1]-=c;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) insert(i,i,a[i]);
while(m--){
int a,b,c;
cin>>a>>b>>c;
insert(a,b,c);
}
for(int i=1;i<=n;i++){
b[i]+=b[i-1];
cout<<b[i]<<' ';
}
return 0;
}
从定义出发求解差分数组b:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int n,m;
void insert(int l,int r,int c){
b[l]+=c;
b[r+1]-=c;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) b[i]=a[i]-a[i-1];
while(m--){
int a,b,c;
cin>>a>>b>>c;
insert(a,b,c);
}
for(int i=1;i<=n;i++){
b[i]+=b[i-1];
cout<<b[i]<<' ';
}
return 0;
}