//主要思路是利用前缀和,将所有该”加c”的操作以一次完成
在insert函数中取l(l即左端left)+c,以便保证后面加上前缀时都能享受到c的加成
而r+1(r即右端right)-c,以便在r以后加上前缀即享受到c的加成,又得到c的减少
如对于 ( 4 , 9 , c )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
c 0 0 0 0 0 0 -c 0 0 0 0 0 0
开始加上前缀 c c c c c c 0 0 0 0 0 0 0 0
+c +c +c +c +c +c +c-c +c-c +c-c +c-c +c-c +c-c +c-c +c-c
include[HTML_REMOVED]
using namespace std;
const int N=1e5+10;
int a[N],b[N];
void insert(int l,int r,int c)
{
b[l]+=c;
b[r+1]-=c;
}
int main()
{
int n,m;
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 l,r,c;
cin>>l>>r>>c;
insert(l,r,c);
}
for(int i=1;i<=n;i)b[i]+=b[i-1];
for(int i=1;i<=n;i)cout<<b[i]<<” “;
return 0;
}