#include "shortcut.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(a, b) for(int a = 0; a < (b); ++a)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
const ll INF=1e18+7;
const int LIM=1e6+7;
ll P[LIM], T[LIM], prefm[LIM], lewo[LIM], prawo[LIM], dlewo[LIM], dprawo[LIM], n, C;
ll sred(ll a, ll b) {
ll sum=P[b]-P[a]+C; sum/=2;
vector<pair<ll,ll>>S;
ll akt=0;
rep(i, b-a) {
S.pb({T[a+i], akt});
akt+=P[a+i+1]-P[a+i];
}
S.pb({prawo[b], akt});
akt+=C;
S[0].st=lewo[a];
rep(i, b-a+1) S.pb({S[i].st, S[i].nd+akt});
vector<pair<ll,ll>>X;
int l=0, l2=0;
ll ans=max(dlewo[a], dprawo[b]);
rep(i, S.size()) {
while(l<S.size() && S[l].nd-S[i].nd<=sum) {
while(X.size() && X.back().st<=S[l].nd+S[l].st) X.pop_back();
l2=min(l2, (int)X.size());
X.pb({S[l].nd+S[l].st, l});
++l;
}
while(l2<X.size() && X[l2].nd<=i) ++l2;
if(l2<X.size()) ans=max(ans, X[l2].st-S[i].nd+S[i].st);
}
return ans;
}
bool check(ll k) {
ll xpy_gora=INF, ymx_dol=0;
for(int b=1; b<n; ++b) {
if(prefm[b-1]>k-P[b]-T[b]) {
xpy_gora=min(xpy_gora, -prefm[b-1]+P[b]-T[b]+k-C);
ymx_dol=max(ymx_dol, prefm[b-1]+P[b]+T[b]-k+C);
}
}
rep(b, n) if(2*P[b]>=xpy_gora+ymx_dol) {
for(int a=b-1; a>=0; --a) {
if(P[a]+P[b]<=xpy_gora && P[b]-P[a]>=ymx_dol) {
if(sred(a, b)<=k) return true;
break;
}
}
break;
}
for(int b=n-1; b>=0; --b) if(2*P[b]<=xpy_gora+ymx_dol) {
for(int a=b-1; a>=0; --a) {
if(P[a]+P[b]<=xpy_gora && P[b]-P[a]>=ymx_dol) {
if(sred(a, b)<=k) return true;
break;
}
}
break;
}
return false;
}
ll find_shortcut(int _n, vector<int>_l, vector<int>_d, int _c) {
n=_n; C=_c;
rep(i, n-1) P[i+1]=P[i]+_l[i];
rep(i, n) T[i]=_d[i];
rep(i, n) {
prefm[i]=T[i]-P[i];
if(i) prefm[i]=max(prefm[i], prefm[i-1]);
if(i) lewo[i]=lewo[i-1]+P[i]-P[i-1];
lewo[i]=max(lewo[i], T[i]);
if(i) dlewo[i]=dlewo[i-1];
dlewo[i]=max(dlewo[i], T[i]);
if(i) dlewo[i]=max(dlewo[i], lewo[i-1]+P[i]-P[i-1]+T[i]);
}
for(int i=n-1; i>=0; --i) {
if(i<n-1) prawo[i]=prawo[i+1]+P[i+1]-P[i];
prawo[i]=max(prawo[i], T[i]);
if(i<n-1) dprawo[i]=dprawo[i+1];
dprawo[i]=max(dprawo[i], T[i]);
if(i<n-1) dprawo[i]=max(dprawo[i], prawo[i+1]+P[i+1]-P[i]+T[i]);
}
ll po=0, ko=3000000000000000;
while(po<ko) {
ll sr=(po+ko)/2;
if(check(sr)) ko=sr; else po=sr+1;
}
return po;
}
Compilation message
shortcut.cpp: In function 'll sred(ll, ll)':
shortcut.cpp:5:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
5 | #define rep(a, b) for(int a = 0; a < (b); ++a)
| ^
shortcut.cpp:28:3: note: in expansion of macro 'rep'
28 | rep(i, S.size()) {
| ^~~
shortcut.cpp:29:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
29 | while(l<S.size() && S[l].nd-S[i].nd<=sum) {
| ~^~~~~~~~~
shortcut.cpp:35:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
35 | while(l2<X.size() && X[l2].nd<=i) ++l2;
| ~~^~~~~~~~~
shortcut.cpp:36:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
36 | if(l2<X.size()) ans=max(ans, X[l2].st-S[i].nd+S[i].st);
| ~~^~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
4444 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
4444 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
4440 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
4444 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
4444 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
4444 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
1 ms |
4444 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
1 ms |
4440 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
1 ms |
4444 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
0 ms |
4444 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
1 ms |
4440 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
1 ms |
4444 KB |
n = 10, 1000000343 is a correct answer |
18 |
Incorrect |
1 ms |
4444 KB |
n = 10, incorrect answer: jury 3189 vs contestant 3392 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
4444 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
4444 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
4440 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
4444 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
4444 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
4444 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
1 ms |
4444 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
1 ms |
4440 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
1 ms |
4444 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
0 ms |
4444 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
1 ms |
4440 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
1 ms |
4444 KB |
n = 10, 1000000343 is a correct answer |
18 |
Incorrect |
1 ms |
4444 KB |
n = 10, incorrect answer: jury 3189 vs contestant 3392 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
4444 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
4444 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
4440 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
4444 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
4444 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
4444 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
1 ms |
4444 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
1 ms |
4440 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
1 ms |
4444 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
0 ms |
4444 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
1 ms |
4440 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
1 ms |
4444 KB |
n = 10, 1000000343 is a correct answer |
18 |
Incorrect |
1 ms |
4444 KB |
n = 10, incorrect answer: jury 3189 vs contestant 3392 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
4444 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
4444 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
4440 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
4444 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
4444 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
4444 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
1 ms |
4444 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
1 ms |
4440 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
1 ms |
4444 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
0 ms |
4444 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
1 ms |
4440 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
1 ms |
4444 KB |
n = 10, 1000000343 is a correct answer |
18 |
Incorrect |
1 ms |
4444 KB |
n = 10, incorrect answer: jury 3189 vs contestant 3392 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
4444 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
4444 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
4440 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
4444 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
4444 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
4444 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
1 ms |
4444 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
1 ms |
4440 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
1 ms |
4444 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
0 ms |
4444 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
1 ms |
4440 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
1 ms |
4444 KB |
n = 10, 1000000343 is a correct answer |
18 |
Incorrect |
1 ms |
4444 KB |
n = 10, incorrect answer: jury 3189 vs contestant 3392 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
4444 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
4444 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
4440 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
4444 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
4444 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
4444 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
1 ms |
4444 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
1 ms |
4440 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
1 ms |
4444 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
0 ms |
4444 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
1 ms |
4440 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
1 ms |
4444 KB |
n = 10, 1000000343 is a correct answer |
18 |
Incorrect |
1 ms |
4444 KB |
n = 10, incorrect answer: jury 3189 vs contestant 3392 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
4444 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
4444 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
4440 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
4444 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
4444 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
4444 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
1 ms |
4444 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
1 ms |
4440 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
1 ms |
4444 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
0 ms |
4444 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
1 ms |
4440 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
1 ms |
4444 KB |
n = 10, 1000000343 is a correct answer |
18 |
Incorrect |
1 ms |
4444 KB |
n = 10, incorrect answer: jury 3189 vs contestant 3392 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
4444 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
4444 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
4440 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
4444 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
4444 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
4444 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
1 ms |
4444 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
1 ms |
4444 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
1 ms |
4440 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
1 ms |
4444 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
1 ms |
4444 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
0 ms |
4444 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
1 ms |
4440 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
1 ms |
4444 KB |
n = 10, 1000000343 is a correct answer |
18 |
Incorrect |
1 ms |
4444 KB |
n = 10, incorrect answer: jury 3189 vs contestant 3392 |
19 |
Halted |
0 ms |
0 KB |
- |