
二. 理论

三. 代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N=1e5+10;
int n, m;
class Difference
{
public:
int a[N], b[N];//原数组,原数组的差分数组
public:
Difference()
{
initIO();
fill(a, a+N, 0);
fill(b, b+N, 0);
}
void initIO()
{
// 关闭输入输出缓存,使效率提升
ios::sync_with_stdio(false);
// 解除cin和cout的默认绑定,来降低IO的负担使效率提升
cin.tie(nullptr);
cout.tie(nullptr);
}
//求出差分数组b
void initD()
{
for(int i=1;i<=n;++i)
b[i]=a[i]-a[i-1];
}
//给a数组l~r间每个数都加x
void add(int l, int r, int x)
{
b[l]+=x;
b[r+1]-=x;
}
//多个区间加完后,对b求前缀和,得到新a
void getPa()
{
for(int i=1;i<=n;++i)
b[i]+=b[i-1];
}
}d;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>d.a[i];
d.initD();
while(m--)
{
int l, r, x;
cin>>l>>r>>x;
d.add(l, r, x);
}
d.getPa();
for(int i=1;i<=n;++i)
cout<<d.b[i]<<" ";
}