#include <bits/stdc++.h>
using namespace std;
int main() {
int N, K;
long long X;
cin >> N >> K >> X;
vector l(N, 0LL), r(N, 0LL), t(N, 0LL);
for(int i = 0; i < N; i++) { cin >> l[i] >> t[i] >> r[i]; r[i]++; }
/* 座標圧縮用の座標 */
vector P(0, 0LL);
for(int i = 0; i < N; i++) { P.push_back(l[i]), P.push_back(r[i]); } /* 各区間の始点終点 */
for(int i = 0; i < N; i++) { if(l[i]+t[i] < r[i]) { P.push_back(l[i]+t[i]); } } /* 追加料金のかかる区間の始点 */
sort(begin(P), end(P));
P.erase(unique(begin(P), end(P)), end(P));
set<long long> S;
for(int i = 0; i < (int)size(P); i++) { S.insert(P[i]); }
for(int s : S) { P.push_back(s+X), P.push_back(s-X); } /* ある点から X の距離の点 */
sort(begin(P), end(P));
P.erase(unique(begin(P), end(P)), end(P));
/* P の逆引きできるような連想配列 */
map<long long, int> mp;
for(int i = 0; i < (int)size(P); i++) { mp[P[i]] = i; }
vector imos(size(P), 0);
for(int i = 0; i < N; i++) { imos[mp[l[i]]]++; imos[mp[r[i]]]--; } /* 各区間の区間加算 */
for(int i = 0; i+1 < (int)size(P); i++) { imos[i+1] += imos[i]; } /* 求解 */
vector imos2(size(P), 0LL);
for(int i = 0; i < N; i++) { if(l[i]+t[i] < r[i]) { imos2[mp[l[i]+t[i]]]++; imos2[mp[r[i]]]--; } } /* 追加料金の区間加算 */
for(int i = 0; i+1 < (int)size(P); i++) { imos2[i+1] += imos2[i]; } /* 求解 */
for(int i = 0; i < (int)size(P); i++) { if(imos[i] < K) { imos2[i] = 0; } } /* 許される場合は除外する */
/* 尺取り法 */
long long ans(0LL), res(0LL);
for(int i = 0, j = 0; i+1 < (int)size(P); i++) {
for(; j < (int)size(P); j++) {
if(P[i]+X <= P[j]) { break; }
else if(j+1 < (int)size(P)) { res += imos2[mp[P[j]]] * (long long)(P[j+1]-P[j]); } /* 右端を加算 */
else break;
}
if((S.find(P[i]) != end(S)) || (S.find(P[j]) != end(S))) ans = max(res, ans);
res -= imos2[mp[P[i]]] * (long long)(P[i+1] - P[i]); /* 左端を加算 */
}
cout << ans << endl;
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
1 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
1 ms |
348 KB |
Output is correct |
10 |
Correct |
1 ms |
348 KB |
Output is correct |
11 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
12 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
1 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
1 ms |
348 KB |
Output is correct |
10 |
Correct |
1 ms |
348 KB |
Output is correct |
11 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
12 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
1 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
1 ms |
348 KB |
Output is correct |
10 |
Correct |
1 ms |
348 KB |
Output is correct |
11 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
12 |
Halted |
0 ms |
0 KB |
- |