洛谷P1083
这也太多二分题了
点击查看代码
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e6+10;
ll r[N];
ll d[N], s[N], t[N];
ll diff[N];
int n, m;
bool check(int x) {
memset(diff, 0, sizeof(diff));
for(int i = 1; i <= x; i++) {
diff[s[i]] += d[i];
diff[t[i] + 1] -= d[i];
}
ll sum = 0;
for(int i = 1; i <= n; i++) {
sum += diff[i];
if(sum > r[i]) return 0;
}
return 1;
}
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];
// diff[s[i]]++;
// diff[t[i] + 1]--;
}
if(check(m)) {
cout << "0\n";
} else {
int l = 1, r = m, ans = 0;
while(l <= r) {
int mid = (l + r) / 2;
if(check(mid)) {
l = mid + 1;
} else {
ans = mid;
r = mid - 1;
}
}
cout << "-1\n" << ans << '\n';
}
return 0;
}

浙公网安备 33010602011771号