rt,代码如下:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pr pair<int,int>
#define mr(x, y) make_pair((x), (y))
#define fi first
#define se second
inline int read(){
int f=1, s=0;
char c=getchar();
while((c<'0' || c>'9') && c!='-')c=getchar();
if(c=='-')
f=-1, c=getchar();
while(c>='0' && c<='9')s=s*10+c-'0', c=getchar();
return f*s;
}
inline void pu(int x){
if(x<0){
putchar('-');
pu(-x);
}
else if(x<10)
putchar(x+'0');
else{
pu(x/10);
putchar(x%10+'0');
}
}
struct dd{
int l;
int r;
int c;
}a[1000005];
int b[1000005];
int cf[1000005];
int n;
int f(int m){
memset(cf, 0, sizeof cf);
for(int i=0;i<m;i++)
cf[a[i].l]+=a[i].c, cf[a[i].r+1]-=a[i].c;
for(int s=0, i=0;i<n;i++){
s+=cf[i];
if(s>b[i])
return false;
}
return true;
}
signed main(){
n=read();
int m=read();
for(int i=0;i<n;i++)
b[i]=read();
for(int i=0;i<m;i++)
a[i].c=read(), a[i].l=read(), a[i].r=read();
if(f(m)){
pu(0);
return 0;
}
int ans=0;
for(int l=0, r=m;l<=r;){
int mid=l+(r-l)/2;
if(f(mid))
ans=mid, l=mid+1;
else
r=mid-1;
}
pu(-1);
putchar('\n');
pu(ans+1);
return 0;
}