1 条题解
-
0
```cpp #include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 1e6 + 10; int n, m; ll r[MAXN]; ll d[MAXN], s[MAXN], t[MAXN]; ll diff[MAXN]; bool check(int mid) { memset(diff, 0, sizeof(diff)); for(int i = 1; i <= mid; ++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 false; } return true; } inline ll read() { ll x = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar(); } return x * f; } int main() { n = read(), m = read(); for(int i = 1; i <= n; ++i) r[i] = read(); for(int i = 1; i <= m; ++i) { d[i] = read(); s[i] = read(); t[i] = read(); } 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; } } if(ans == 0) cout << 0 << endl; else { cout << -1 << endl; cout << ans << endl; } return 0; }
信息
- ID
- 3435
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 37
- 已通过
- 4
- 上传者