求助
查看原帖
求助
703537
hly123楼主2023/9/29 19:49
#include<iostream>
#include<cstring>
using namespace std;

int n, m, r[1000005], a[1000005], d[1000005], s[1000005], t[1000005], p[1000005];

bool chk(int x)
{ 
	memset(a, 0, sizeof(a));
	memset(d, 0, sizeof(d));
	for(int i = 1; i <= x; i++)
	{
		d[s[i]] += p[i];
		d[t[i]+1] -= p[i];
	}
	for(int i = 1; i <= n; i++)
		a[i] = a[i-1] + d[i];
	for(int i = 1; i <= n; i++)
		if(a[i] > r[i]) return true;
	
	return false;
}
int main()
{
	cin >> n >> m;
	for(int i = 1; i <= n; i++) cin >> r[i];
	for(int i = 1; i <= m; i++) cin >> p[i] >> s[i] >> t[i];
	
	int low = 1, high = m + 1, ans = m + 1;
	while(low <= high)
	{
		int mid = (low + high) / 2;
		if(chk(mid) == true) 
		{
			ans = mid;
			high = mid - 1;
		}
		else low = mid + 1;
	}
	
	if(ans == m + 1) cout << 0 << endl;
	else cout << -1 << endl << ans << endl;
	
	return 0;
}
2023/9/29 19:49
加载中...