HELP
查看原帖
HELP
338147
01bit楼主2021/2/2 20:48
#include<cstdio>
using namespace std;
int n,m;
int r[1000001],d[1000001],s[1000001],t[1000001],b[1000001];
bool check(int num){
	for(int i=1;i<=m;i++)b[s[i]]-=d[i],b[t[i]-1]+=d[i];
	int a[1000001];
	bool flag=true;
	for(int i=1;i<=m;i++){
		a[i]=a[i-1]+b[i];
		if(a[i]<0)flag=false;
	}
	for(int i=1;i<=m;i++)b[i]=r[i]-r[i-1];
	return flag;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",r+i),b[i]=r[i]-r[i-1];
	for(int i=1;i<=m;i++)scanf("%d%d%d",d+i,s+i,t+i);
	int l=1,r=m,ans;
	while(l<r){
		int mid=(l+r)>>1;
		if(check(mid))l=mid+1,ans=mid;
		else r=mid;
	}
	if(ans==m)printf("0");
	else printf("-1\n%d",ans+1);
	return 0;
}

2021/2/2 20:48
加载中...