70分求助
查看原帖
70分求助
1378097
zjinyi楼主2024/10/27 21:18

我的代码(评测记录):

#include <iostream>
using namespace std;

long long n, m;
long long r[1000001], d[1000001], s[1000001], t[100001], a[1000001], pre[1000001];

bool check(long long x)
{
	for (long long i = 1; i <= n; ++i)
	{
		a[i] = 0;
	}
	for (long long i = 1; i <= x; ++i)
	{
		a[s[i]] += d[i];
		a[t[i] + 1] -= d[i];
	}
	for (long long i = 1; i <= n; ++i)
	{
		pre[i] = pre[i - 1] + a[i];
		if (pre[i] > r[i])
		{
			return false;
		}
	}
	return true;
}

int main()
{
	cin >> n >> m;
	for (long long i = 1; i <= n; ++i)
	{
		cin >> r[i];
	}
	for (long long i = 1; i <= m; ++i)
	{
		cin >> d[i] >> s[i] >> t[i];
	}
	if (check(m) == true)
	{
		cout << 0;
		return 0;
	}
	long long l = 1, r = m, mid;
	while (l < r)
	{
		mid = (l + r) / 2;
		if (check(mid) == true)
		{
			l = mid + 1;
		}
		else
		{
			r = mid;
		}
	}
	cout << -1 << endl << l;
	return 0;
}
2024/10/27 21:18
加载中...