题目链接:https://www.luogu.org/problemnew/show/P1083
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
int n,m,r[maxn],f[maxn],a[maxn],d[maxn],s[maxn],t[maxn];
int judge(int mid)
{
a[0]=0;
memset(f,0,sizeof(a));
for(int i=1;i<=mid;i++)
{
f[s[i]]+=d[i];
f[t[i]+1]-=d[i];
}
for(int i=1;i<=n;i++)
{
a[i]=a[i-1]+f[i];
if(a[i]>r[i]) return 0;
}
return 1;
}
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",&d[i],&s[i],&t[i]);
int mid,l=1,r=m;
while(l<r)
{
mid=(l+r)/2;
if(judge(mid)) l=mid+1;
else r=mid;
}
if(m==r) puts("0");
else printf("-1\n%d\n",l);
return 0;
}
一道稍微复杂一点的题目