代码
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
struct Holder{
int d,s,t;
}ord[1000010];
int n,m,r[1000010],pre[1000010],sum,ans;
int Judge(int x){
memset(pre,0,sizeof(pre));
sum=0;
for(int i=1;i<=x;i++){
pre[ord[i].s]+=ord[i].d;
pre[ord[i].t+1]-=ord[i].d;
}
for(int i=1;i<=n;i++){
sum+=pre[i];
if(sum>r[i]) return 0;
}
return 1;
}
void Bisection(){
int l=1,r=m,mid;
while(l<r){
mid=(l+r)>>1;
if(Judge(mid)){
l=mid+1;
}else{
r=mid;
ans=mid;
}
}
if(!ans){
printf("0");
}else{
printf("-1\n%d",ans);
}
}
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&r[i]);
}
for(int i=1;i<=m;i++){
scanf("%d%d%d",&ord[i].d,&ord[i].s,&ord[i].t);
}
Bisection();
}