70pts求调
查看原帖
70pts求调
906102
xiaozhangawa楼主2024/4/14 17:58
#include <bits/stdc++.h>
using namespace std;
long long d[1000010],a[1000010],s[1000010],t[1000010],c[1000010],b[100010],n;
bool check(int x);
int main(){
	int m;
	cin>>n>>m;
	for(int i = 1;i <= n;i++){
		cin>>a[i];
		d[i] = a[i]-a[i-1];
	}
	for(int i = 1;i <= m;i++){
		cin>>c[i]>>s[i]>>t[i];
		d[s[i]] -= c[i];
		d[t[i]+1] += c[i];
	}
	bool flag = 1;
	for(int i = 1;i <= n;i++){
		b[i] = b[i-1] + d[i];
		if(b[i] < 0){
			cout<<-1<<endl;
			flag = 0;
			break;
		}
	}
	if(flag){
		cout<<0;
		return 0;
	}
	int l = 1,r = m,ans = 0;
	while(l < r){
		int mid = (l+r)>>1;
		if(check(mid)) l = mid+1;
		else r = mid,ans = mid;
	}
	cout<<ans;
	return 0;
}
bool check(int x){
	for(int i = 1;i <= n;i++){
		d[i] = a[i]-a[i-1];
	}
	for(int i = 1;i <= x;i++){
		d[s[i]] -= c[i];
		d[t[i]+1] += c[i];
	}
	for(int i = 1;i <= n;i++){
		b[i] = b[i-1] + d[i];
		if(b[i] < 0) return 0;
	}
	return 1;
}
2024/4/14 17:58
加载中...