#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100010;
ll n,m;
ll l,r,c;
ll a[N],b[N];//b[i]是a[i]的差分,差分是前缀和的逆运算
void insert(int l,int r,int c)
{
b[l]+=c;//b[l]这个点加上c,此时前缀和中,但凡有过l的都会加上c
b[r+1]-=c;//例 如果a[l]原来等于5,然后l加上1,则a[l]=b[0]+b[1]+...b[l] 所以a[l]变成6 a[l+1] 也要再加上1
}//l加上c,r+1-c,因为a[i]是b[i]的前缀和,所以a[l]到a[r]的全部数都额外加上一个c,即b[l]到b[r]都加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]);//将i到i的区间加上a[i]
}
while(m--)
{
cin>>l>>r>>c;
insert(l,r,c);
}
for(int i=1;i<=n;i++)
{
b[i]+=b[i-1];//把b数组变成自己的前缀和
//为什么呢,例如 b[1]=b[0]+b[1] 此时 b[2]=b[1]+b[2]=b[0]+b[1]+b[2]....所以b[i]=b[0]+b[1]+b[2]+...+b[i]
cout<<b[i]<<' ';
}
}