55分求助
查看原帖
55分求助
1069315
hm114514楼主2023/11/26 21:42
#include<string.h>

using namespace std;

const int N = 1e6 + 10;
long long a[N], b[N];

struct deal
{
	long long c;
	int l;
	int r;
}q[N];

bool check(int mid)
{
	memset(a, 0, sizeof(a));
	for (int i = 1; i <= mid; i++)
	{
		a[q[i].l] += q[i].c;
		a[q[i].r + 1] -= q[i].c;
	}
	for (int i = 1; i <= mid; i++)
	{
		a[i] += a[i - 1];
		if (b[i] - a[i] < 0)
		{
			return 1;
		}
	}
	return 0;
}

int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		b[i] = a[i];
	}
	for (int i = 1; i <= m; i++)
	{
		cin >> q[i].c >> q[i].l >> q[i].r;
	}//预处理数据


	int l = 0, r = m + 1;
	while (l + 1 != r)
	{
		int mid = l + r >> 1;
		if (check(mid)) r = mid;
		else l = mid;
	}//二分
	if (r == m + 1)
	{
		cout << 0;
	}
	else
	{
		cout << -1 << '\n' << r;
	}
	return 0;
}
2023/11/26 21:42
加载中...