#include "bits/stdc++.h"
using namespace std;
#ifdef Nero
#include "Deb.h"
#else
#define debug(...)
#endif
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k, x;
cin >> n >> k >> x;
vector<int> lp(n), t(n), rp(n);
for (int i = 0; i < n; ++i) {
cin >> lp[i] >> t[i] >> rp[i];
}
vector<array<int, 3>> pts;//second, pay, stay
for (int i = 0; i < n; ++i) {
pts.push_back({lp[i], 0, 1});
pts.push_back({lp[i] + t[i], 1, 0});
pts.push_back({rp[i] + 1, -1, -1});
}
vector<int> len;
sort(pts.begin(), pts.end());
vector<array<int, 3>> rng;//l, r, val
int p = 0, s = 0;
for (int i = 0; i < n * 3 - 1; ++i) {
auto [second, pay, stay] = pts[i];
s += stay;
p += pay;
int val = (s >= k ? p : 0);
len.push_back({pts[i + 1][0] - second});
rng.push_back({second, pts[i + 1][0] - 1, val});
}
int r = -1;
int curLen = 0;
int m = n * 3 - 1;
long long ans = 0;
long long curVal = 0;
for (int l = 0; l < m; ++l) {
while (r + 1 < m && curLen + len[r + 1] <= x) {
curLen += len[r + 1];
curVal += (long long) len[r + 1] * rng[r + 1][2];
r++;
}
if (r < l) {
curLen = curVal = 0;
ans = max(ans, (long long) x * rng[l][2]);
r = l;
continue;
}
int space = x - curLen;
if (r + 1 < m) {
long long tmp = curVal;
if (rng[l][2] >= rng[r + 1][2]) {
tmp += (long long) space * rng[r + 1][2];
ans = max(ans, tmp);
} else {
int mn = min(len[l], len[r + 1] - space);
tmp -= (long long) mn * rng[l][2];
tmp += (long long) (mn + space) * (rng[r + 1][2]);
ans = max(ans, tmp);
}
} else {
ans = max(ans, curVal);
}
curLen -= len[l];
curVal -= (long long) rng[l][2] * len[l];
}
cout << ans << '\n';
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
1 ms |
344 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
12 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
1 ms |
344 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
12 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
1 ms |
344 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
12 |
Halted |
0 ms |
0 KB |
- |