AcWing 797. 差分
原题链接
简单
作者:
wowowo
,
2020-03-07 17:18:54
,
所有人可见
,
阅读 468
C++ 代码
#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N],b[N],s[N];
void insert(int l,int r,int c)
{
b[l]=b[l]+c;
b[r+1]=b[r+1]-c;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;++i) //意思是输入的s[i]是前缀和,而根据定义可知,s[i]是a1-a2...ai的和,s[i]=s[i-1]+a[i]
cin>>s[i];
for(int i=1;i<=n;++i)
a[i]=s[i]-s[i-1]; //所以这里得到了初始数组,也叫作差分数组 也可用insert(i,i,s[i]);求得
while(m--)
{
int l,r,c;
cin>>l>>r>>c;
a[l]=a[l]+c; //想在前缀和的数组一段上加上c,可以直接在差分的某一个数据上加上c就可以 //或insert(l,r,c);
a[r+1]=a[r+1]-c;
}
for(int i=1;i<=n;++i)
s[i]=a[i]+s[i-1]; //在此求前缀和
for(int i=1;i<=n;++i)
cout<<s[i]<<" ";
return 0;
}