题目
思路
差分的实质是通过构造数组b减少时间复杂度,数组a为初始数据,构造数组b,数组a是b的前缀和,通过对数组b操作就可以实现数组a每个数加上c,而对数组b的操作在单位时间内即可完成,对数组b操作完后,再用b表示a。
代码
#include<iostream>
using namespace std;
const int N=100010;
int main()
{
int n,m;
cin>>n>>m;
int a[N],b[N];
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 l,r,c;
cin>>l>>r>>c;
b[l]=b[l]+c;
b[r+1]=b[r+1]-c;
}
for(int i=1;i<=n;i++)
{
a[i]=a[i-1]+b[i];
cout<<a[i]<<" ";
}
return 0;
}