差分+二分 超易读 求助 错两个点
查看原帖
差分+二分 超易读 求助 错两个点
106619
yagyagyag楼主2020/8/27 18:32
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=1e6+5;
int n,m,r[MAXN],d[MAXN],s[MAXN],t[MAXN];
int diff[MAXN],tmp[MAXN];
bool check(int day)
{
	memset(diff,0,sizeof diff);
	memset(tmp,0,sizeof tmp);
	for (int i=1;i<=day;i++){
		diff[s[i]]+=d[i];
		diff[t[i]+1]-=d[i];
	}
	for (int i=1;i<=n;i++)
		tmp[i]=tmp[i-1]+diff[i];
	for (int i=1;i<=n;i++)
		if (tmp[i]>r[i]) return false;
	return true;
}
int main()
{
	cin>>n>>m;
	for (int i=1;i<=n;i++)
		scanf("%d",r+i);
	int ans=0;bool flag=0;
	for (int i=1;i<=m;i++)
		scanf("%d%d%d",d+i,s+i,t+i);
	int L=1,R=n,mid;
	while (L<=R){
		mid=(L+R)/2;
		if (check(mid)){
			ans=mid;flag=1;
			L=mid+1;
		}
		else R=mid-1;
	}
	if (!flag) cout<<0<<endl;
	else cout<<-1<<endl<<ans<<endl;
	return 0;
}
2020/8/27 18:32
加载中...