100分求助
查看原帖
100分求助
1280953
life_end楼主2024/8/13 15:23
#include<bits/stdc++.h>
using namespace std;
int n, m, ans = INT_MAX;
int r[1000001], c[1000001], now;
int d[1000001], s[1000001], t[1000001];
bool check(int mid) {
	int sum = 0;
	if (now > mid) {
		for (int i = mid + 1; i <= now; i++) {
			c[s[i]] -= d[i];
			c[t[i] + 1] += d[i];
		}
	} else {
		for (int i = now + 1; i <= mid; i++) {
			c[s[i]] += d[i];
			c[t[i] + 1] -= d[i];
		}
	}
	now = mid;
	for (int i = 1; i <= n; i++) {
		sum += c[i];
		if (sum > 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 >> d[i] >> s[i] >> t[i];
	}
	int l = 1, r = m, mid;
	while (l <= r) {
		if (l <= r) {
			mid = (l + r) / 2;
			if (check(mid)) {
				ans = min(ans, mid);
				r = mid - 1;
			} else {
				l = mid + 1;
			}
		}
	}
	if (ans != INT_MAX) {
		cout << -1 << endl;
		cout << ans << endl;
	} else {
		cout << 0;
	}
	return 0;
}
2024/8/13 15:23
加载中...