/
因为本题的订单是按照顺序的 所以在不断的累加要求时可以把他们看成一个具有二分性的区间
找到那个不可以的第一个订单 后面的就一定都不可以
对区间进行操作 - 差分数组前缀+二分/树状数组
/
include [HTML_REMOVED]
using namespace std;
define int long long
const int MAXSIZE = 1e6+7;
int n,m;
int r[MAXSIZE];
int d[MAXSIZE];
int s[MAXSIZE];
int t[MAXSIZE];
int cf[MAXSIZE];
bool check(int x)
{
//1.初始化差分数组
cf[0] = 0;
for(int i=1;i<=n;i)
cf[i]=r[i]-r[i-1];
//2.看看传进来的x之前的订单是否都能满足
for(int i=1;i<=x;i)
{
cf[s[i]] -= d[i];
cf[t[i]+1] += d[i];
}
for(int i=1;i<=n;i)
{
cf[i]+=cf[i-1];
if(cf[i] < 0)return false;
}
return true;
}
void solve()
{
cin>>n>>m;
for(int i=1;i<=n;i)cin>>r[i];
for(int i=1;i<=m;i++)cin>>d[i]>>s[i]>>t[i];
if(check(m)){
//如果可以 下面不需要进行
cout<<0<[HTML_REMOVED]>1;
if(check(mid))
l=mid;
else
r=mid;
//可行域在右侧 返回r
}
cout<<-1<<endl<<r;
}
signed main()
{
ios::sync_with_stdio(false);cin.tie(0);
cout.tie(0);
//cout<[HTML_REMOVED]>t;
while(t–)
solve();
return 0;
}