讨论区那里有一组关于WA#8的代码的hack数据跑起来也是对的
#include<bits/stdc++.h>
#define M 1000005
#define int long long
using namespace std;
int n,m,d,st,en,c[M],bh;
struct node{
int l,r,sum,la,minn;
}tr[M<<2];
void add(int,int,int,int),sp(int),build(int,int,int);
signed main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&c[i]);
build(1,1,n);
for(int i=1;i<=n;i++){
scanf("%lld%lld%lld",&d,&st,&en);
bh=i,add(1,st,en,-d);
}
printf("0");
return 0;
}
void build(int pos,int l,int r){
tr[pos].l=l,tr[pos].r=r;
if(l==r){
tr[pos].minn=tr[pos].sum=c[l];
return ;
}
build(pos<<1,l,(l+r)>>1);
build((pos<<1)+1,((l+r)>>1)+1,r);
tr[pos].minn=min(tr[pos<<1].minn,tr[(pos<<1)+1].minn);
tr[pos].sum=tr[pos<<1].sum+tr[(pos<<1)+1].sum;
}
void add(int pos,int st,int en,int k){
int l=tr[pos].l,r=tr[pos].r,mi=(l+r)>>1;
if(l>=st&&r<=en){
tr[pos].sum+=(r-l+1)*k,tr[pos].la+=k,tr[pos].minn+=k;
if(tr[pos].sum<0||tr[pos].minn<0){
printf("-1\n%lld",bh);
exit(0);
}
return ;
}
sp(pos);
if(!(st>tr[pos<<1].r||en<tr[pos<<1].l))
add(pos<<1,st,en,k);
if(!(st>tr[(pos<<1)+1].r||en<tr[(pos<<1)+1].l))
add((pos<<1)+1,st,en,k);
tr[pos].minn=min(tr[pos<<1].minn,tr[(pos<<1)+1].minn);
}
void sp(int pos){
int k=tr[pos].la,lc=pos<<1,rc=lc+1;
if(k){
tr[lc].la+=tr[pos].la,tr[rc].la+=tr[pos].la;
tr[lc].sum+=k*(tr[lc].r-tr[lc].l+1),tr[rc].sum+=k*(tr[rc].r-tr[rc].l+1);
tr[rc].minn+=k,tr[lc].minn+=k;
tr[pos].la=0;
}
}