P1083 求调 悬关
  • 板块灌水区
  • 楼主xin20110426
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/29 12:05
  • 上次更新2024/11/29 16:06:04
查看原帖
P1083 求调 悬关
429491
xin20110426楼主2024/11/29 12:05
#include <bits/stdc++.h>
using namespace std;
int r[1000010], d[1000010], s[1000010], t[1000010], diff[1000010], need[1000010], n, m, ans = 0x7fffffff;
bool check(int mid) {
	memset(diff, 0, sizeof(diff));
	for (int i = 1; i <= mid; i++) {
		diff[s[i]] += d[i];
		diff[r[i] + 1] -= d[i];
	}
	for (int i = 1; i <= n; i++) {
		need[i] = need[i - 1] + diff[i];
		if (need[i] > r[i]) return 1;
	}
	return 0;
}
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 left = 1, right = m;
	int mid;
	if (!check(m)) {
		cout << 0;
		return 0;
	}
	while (left <= right) {
		mid = (left + right) / 2;
		if (check(mid)) right = mid - 1;
		else left = mid + 1; 
	} 
	cout << -1 << endl << right;
	return 0; 
} 

2024/11/29 12:05
加载中...