이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
/**
* author: wxhtzdy
* created: 30.06.2022 13:02:32
**/
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, k, x;
cin >> n >> k >> x;
vector<int> l(n), t(n), r(n);
for (int i = 0; i < n; i++) {
cin >> l[i] >> t[i] >> r[i];
t[i] = min(t[i], r[i] - l[i] + 1);
}
vector<int> xs;
for (int i = 0; i < n; i++) {
xs.push_back(l[i]);
xs.push_back(l[i] + t[i]);
xs.push_back(r[i] + 1);
}
int m = (int) xs.size();
for (int i = 0; i < m; i++) {
xs.push_back(xs[i] + x);
xs.push_back(xs[i] - x);
}
sort(xs.begin(), xs.end());
xs.erase(unique(xs.begin(), xs.end()), xs.end());
m = (int) xs.size();
vector<int> sa(m);
vector<int> sb(m);
auto Get = [&](int x) {
return lower_bound(xs.begin(), xs.end(), x) - xs.begin();
};
for (int i = 0; i < n; i++) {
sa[Get(l[i])] += 1;
sa[Get(r[i] + 1)] -= 1;
sb[Get(l[i] + t[i])] += 1;
sb[Get(r[i] + 1)] -= 1;
}
for (int i = 1; i < m; i++) {
sa[i] += sa[i - 1];
sb[i] += sb[i - 1];
}
vector<long long> f(m);
for (int i = 0; i < m - 1; i++) {
long long d = xs[i + 1] - xs[i];
f[i] = (i == 0 ? 0LL : f[i - 1]) + d * (sa[i] >= k ? sb[i] : 0);
}
long long ans = 0;
for (int i = 0; i < m; i++) {
int j = Get(xs[i] + x - 1);
if (j < m && xs[j] >= xs[i]) {
ans = max(ans, f[j] - (i == 0 ? 0LL : f[i - 1]));
}
}
cout << ans << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |