5pts求助
查看原帖
5pts求助
895312
Archy_楼主2024/8/6 10:04

只有第8 a了,其余wa,开long long了啊

#include <iostream>
#include <cstring>
#define int long long
using namespace std;

const int N = 1000005;
int n, q, dif[N], a[N], d[N], s[N], t[N], need[N];

inline int rd(){
	int w = 1, x = 0;
    char c = getchar();
	while(c < 48 || c > 57) {
		if(c == 45) w *= -1;
		c = getchar();
	}
	while(c >= 48 && c<= 57) {
		x = (x << 1) + (x << 3) + (c ^ 48);
		c = getchar();
	}
	return x * w;
}

inline bool check(int x) {
	memset(dif, 0, sizeof(dif));
	memset(need, 0, sizeof(need));
	for(int i = 1; i <= x; i++) {
		dif[s[i]] += d[i];
		dif[t[i] + 1] -= d[i];
	}
	for(int i = 1; i <= x; i++) {
		need[i] = need[i - 1] + dif[i];
		if(need[i] > a[i]) return false;
	}
	return true;
}

main() {
	n = rd(), q = rd();
	for(int i = 1; i <= n; i++) {
		a[i] = rd();
	}
	for(int i = 1; i <= q; i++) {
		d[i] = rd(), s[i] = rd(), t[i] = rd();
	}
	if(check(q)) {
		cout <<"0\n";
		return 0;
	}
	int l = 0, r = q + 1, ans = 0, mid;
	while(l <= r) {
		mid = (l + r) / 2;
		if(check(mid)) l = mid + 1, ans = mid;
		else r = mid - 1;
	}
	cout << "-1\n" << ans << "\n";
	return 0;
} 
2024/8/6 10:04
加载中...