用差分+二分做的,但是一堆TLE
求样例/求调
#include<iostream>
#include<cstring>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define ll long long
using namespace std;
const int N=1e6+5;
ll a[N],b[N],num[N],s[N],e[N],n,m,l,r;
bool check(ll x){
ll sum=0;
memset(b,0,sizeof(b));
FOR(i,1,x){
b[s[i]]+=num[i];
b[e[i]+1]-=num[i];
}
FOR(i,1,m){
sum+=b[i];
if(sum>a[i])
return false;
}
return true;
}
int main(){
cin>>n>>m;
cin>>a[1];b[1]=a[1];
FOR(i,2,n)cin>>a[i];
FOR(i,1,m) cin>>num[i]>>s[i]>>e[i];
r=m;
if(check(m)){cout<<0;return 0;}
else cout<<-1<<endl;
while(l<r){
ll mid=(l+r)/2;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<l+1;
return 0;
}