#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;
class SparseTable {
public:
long long sz[1 << 20];
long long dat[1 << 20][22];
void init(vector<long long> Arr) {
for (int i = 0; i < (1 << 20); i++) {
for (int j = 0; j < 22; j++) dat[i][j] = 0;
}
for (int i = 0; i < (int)Arr.size(); i++) dat[i][0] = Arr[i];
for (int i = 0; i < 20; i++) {
for (int j = 0; j < (int)Arr.size(); j++) {
if (j + (1 << i) >= (int)Arr.size()) continue;
dat[j][i + 1] = max(dat[j][i], dat[j + (1 << i)][i]);
}
}
for (int i = 0; i < 20; i++) {
for (int j = (1 << i); j < (2 << i); j++) sz[j] = i;
}
}
long long query(int l, int r) {
if (l >= r) return -(1LL << 60);
int len = r - l;
int t = sz[len];
return max(dat[l][t], dat[r - (1 << t)][t]);
}
};
// Input
long long N, C;
long long X[1 << 20];
long long Y[1 << 20];
// SparseTable
SparseTable Z1;
SparseTable Z2;
long long calc(int l, int r) {
long long val1 = 0;
long long val2 = 0;
long long val3 = 0;
long long val4 = 0;
long long TotalLen = X[r] - X[l] + C;
// VAL1
int pos1 = lower_bound(X + l, X + r + 1, X[l] + (TotalLen + 1LL) / 2LL) - X;
long long c1 = Z2.query(0, l) + X[l];
long long c2 = Z1.query(l, pos1) - X[l];
long long c3 = Z2.query(pos1, r + 1) + X[r] + C;
val1 = c1 + max(c2, c3);
// VAL2
int pos2 = lower_bound(X + l, X + r + 1, X[r] - TotalLen / 2LL) - X;
long long d1 = Z1.query(r + 1, N) - X[r];
long long d2 = Z2.query(pos2, r + 1) + X[r];
long long d3 = Z1.query(l, pos2) - X[l] + C;
val2 = d1 + max(d2, d3);
// VAL3
long long e1 = Z2.query(0, l + 1) + X[l];
long long e2 = Z1.query(r, N) - X[r];
val3 = e1 + e2 + min(C, X[r] - X[l]);
// VAL4
for (int i = l; i < pos1; i++) {
int pos3 = lower_bound(X + l, X + r + 1, X[i] + (TotalLen + 1LL) / 2LL) - X;
long long d1 = Z2.query(l, i) + X[i];
long long d2 = Z1.query(i + 1, pos3) - X[i];
long long d3 = Z2.query(pos3, r + 1) + X[r] + C + (X[i] - X[l]);
val4 = max(val4, max({d1, d2, d3}) + Y[i]);
}
for (int i = pos1; i <= r; i++) {
int pos3 = lower_bound(X + l, X + r + 1, X[i] - TotalLen / 2LL) - X;
long long d1 = Z1.query(l, pos3) - X[l] + C + (X[r] - X[i]);
long long d2 = Z2.query(pos3, i) + X[i];
long long d3 = Z1.query(i + 1, r + 1) - X[i];
val4 = max(val4, max({d1, d2, d3}) + Y[i]);
}
// GETVAL
//printf("(%d, %d) -> % 4lld, % 4lld, % 4lld, % 4lld\n", l, r, val1, val2, val3, val4);
return max({val1, val2, val3, val4});
}
long long find_shortcut(int n, vector<int> l, vector<int> d, int c) {
// INPUT
N = n; C = c;
for (int i = 1; i < N; i++) X[i] = X[i - 1] + 1LL * l[i - 1];
for (int i = 0; i < N; i++) Y[i] = d[i];
// TABLE
vector<long long> V1; for (int i = 0; i < N; i++) V1.push_back(Y[i] + X[i]);
vector<long long> V2; for (int i = 0; i < N; i++) V2.push_back(Y[i] - X[i]);
Z1.init(V1);
Z2.init(V2);
// TANSAKU
long long FinalAns = (1LL << 60);
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
long long eval = calc(i, j);
FinalAns = min(FinalAns, eval);
}
}
return FinalAns;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
227 ms |
377848 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
234 ms |
377976 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
228 ms |
378024 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
233 ms |
377976 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
228 ms |
377852 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
227 ms |
377848 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
233 ms |
377976 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
231 ms |
377848 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
232 ms |
377976 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
227 ms |
377848 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
230 ms |
377848 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
229 ms |
377976 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
231 ms |
377848 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
231 ms |
377852 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
232 ms |
378232 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
229 ms |
377848 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
234 ms |
377980 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
230 ms |
377952 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
230 ms |
377952 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
232 ms |
377848 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
230 ms |
377976 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
230 ms |
377848 KB |
n = 2, 122 is a correct answer |
23 |
Incorrect |
236 ms |
377848 KB |
n = 10, incorrect answer: jury 117 vs contestant 110 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
227 ms |
377848 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
234 ms |
377976 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
228 ms |
378024 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
233 ms |
377976 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
228 ms |
377852 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
227 ms |
377848 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
233 ms |
377976 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
231 ms |
377848 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
232 ms |
377976 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
227 ms |
377848 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
230 ms |
377848 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
229 ms |
377976 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
231 ms |
377848 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
231 ms |
377852 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
232 ms |
378232 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
229 ms |
377848 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
234 ms |
377980 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
230 ms |
377952 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
230 ms |
377952 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
232 ms |
377848 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
230 ms |
377976 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
230 ms |
377848 KB |
n = 2, 122 is a correct answer |
23 |
Incorrect |
236 ms |
377848 KB |
n = 10, incorrect answer: jury 117 vs contestant 110 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
227 ms |
377848 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
234 ms |
377976 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
228 ms |
378024 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
233 ms |
377976 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
228 ms |
377852 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
227 ms |
377848 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
233 ms |
377976 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
231 ms |
377848 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
232 ms |
377976 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
227 ms |
377848 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
230 ms |
377848 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
229 ms |
377976 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
231 ms |
377848 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
231 ms |
377852 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
232 ms |
378232 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
229 ms |
377848 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
234 ms |
377980 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
230 ms |
377952 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
230 ms |
377952 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
232 ms |
377848 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
230 ms |
377976 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
230 ms |
377848 KB |
n = 2, 122 is a correct answer |
23 |
Incorrect |
236 ms |
377848 KB |
n = 10, incorrect answer: jury 117 vs contestant 110 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
227 ms |
377848 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
234 ms |
377976 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
228 ms |
378024 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
233 ms |
377976 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
228 ms |
377852 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
227 ms |
377848 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
233 ms |
377976 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
231 ms |
377848 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
232 ms |
377976 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
227 ms |
377848 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
230 ms |
377848 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
229 ms |
377976 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
231 ms |
377848 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
231 ms |
377852 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
232 ms |
378232 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
229 ms |
377848 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
234 ms |
377980 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
230 ms |
377952 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
230 ms |
377952 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
232 ms |
377848 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
230 ms |
377976 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
230 ms |
377848 KB |
n = 2, 122 is a correct answer |
23 |
Incorrect |
236 ms |
377848 KB |
n = 10, incorrect answer: jury 117 vs contestant 110 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
227 ms |
377848 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
234 ms |
377976 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
228 ms |
378024 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
233 ms |
377976 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
228 ms |
377852 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
227 ms |
377848 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
233 ms |
377976 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
231 ms |
377848 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
232 ms |
377976 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
227 ms |
377848 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
230 ms |
377848 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
229 ms |
377976 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
231 ms |
377848 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
231 ms |
377852 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
232 ms |
378232 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
229 ms |
377848 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
234 ms |
377980 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
230 ms |
377952 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
230 ms |
377952 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
232 ms |
377848 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
230 ms |
377976 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
230 ms |
377848 KB |
n = 2, 122 is a correct answer |
23 |
Incorrect |
236 ms |
377848 KB |
n = 10, incorrect answer: jury 117 vs contestant 110 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
227 ms |
377848 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
234 ms |
377976 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
228 ms |
378024 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
233 ms |
377976 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
228 ms |
377852 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
227 ms |
377848 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
233 ms |
377976 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
231 ms |
377848 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
232 ms |
377976 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
227 ms |
377848 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
230 ms |
377848 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
229 ms |
377976 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
231 ms |
377848 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
231 ms |
377852 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
232 ms |
378232 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
229 ms |
377848 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
234 ms |
377980 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
230 ms |
377952 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
230 ms |
377952 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
232 ms |
377848 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
230 ms |
377976 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
230 ms |
377848 KB |
n = 2, 122 is a correct answer |
23 |
Incorrect |
236 ms |
377848 KB |
n = 10, incorrect answer: jury 117 vs contestant 110 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
227 ms |
377848 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
234 ms |
377976 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
228 ms |
378024 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
233 ms |
377976 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
228 ms |
377852 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
227 ms |
377848 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
233 ms |
377976 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
231 ms |
377848 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
232 ms |
377976 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
227 ms |
377848 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
230 ms |
377848 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
229 ms |
377976 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
231 ms |
377848 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
231 ms |
377852 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
232 ms |
378232 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
229 ms |
377848 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
234 ms |
377980 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
230 ms |
377952 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
230 ms |
377952 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
232 ms |
377848 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
230 ms |
377976 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
230 ms |
377848 KB |
n = 2, 122 is a correct answer |
23 |
Incorrect |
236 ms |
377848 KB |
n = 10, incorrect answer: jury 117 vs contestant 110 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
227 ms |
377848 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
234 ms |
377976 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
228 ms |
378024 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
233 ms |
377976 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
228 ms |
377852 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
227 ms |
377848 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
233 ms |
377976 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
231 ms |
377848 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
232 ms |
377976 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
227 ms |
377848 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
230 ms |
377848 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
229 ms |
377976 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
231 ms |
377848 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
231 ms |
377852 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
232 ms |
378232 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
229 ms |
377848 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
234 ms |
377980 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
230 ms |
377952 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
230 ms |
377952 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
232 ms |
377848 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
230 ms |
377976 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
230 ms |
377848 KB |
n = 2, 122 is a correct answer |
23 |
Incorrect |
236 ms |
377848 KB |
n = 10, incorrect answer: jury 117 vs contestant 110 |
24 |
Halted |
0 ms |
0 KB |
- |