#include "bits/stdc++.h"
#include "shortcut.h"
using namespace std;
vector<pair<int,int>> adj[100001];
long long maa = -1 , lol = -1;
void dfs(int i,int pr,int dep){
if(maa<dep){
maa = dep;
lol = i;
}
for(auto j:adj[i]){
if(j.first==pr)continue;
dfs(j.first,i,dep+j.second);
}
}
int cnt = 0;
long long oo = 1e18;
int n;
long long sumpref[100001],sumsuf[100001];
long long tbpref[100001][20],tbsuf[100001][20];
long long pref[100001];long long suf[100001];
long long D[100001];
long long get_dist(int a,int b){
return sumpref[b]-sumpref[a];
}
long long MA(int a,int b,int c){
int lg = __lg(b-a+1);
if(c<=a){
return max(tbpref[a][lg],tbpref[b-(1<<lg)+1][lg])-sumpref[c];
}else{
return max(tbsuf[a][lg],tbsuf[b-(1<<lg)+1][lg])-sumsuf[c];
}
}
long long shortcut(int a,int b,long long c){
if(a>b)swap(a,b);
long long ans = 0;
int l = a , r = b , an = -1;
ans = max(ans,MA(b,n-1,b)+MA(0,a,a)+min(c,get_dist(a,b)));
while(l<=r){
int mid = (l+r)/2;
if(get_dist(a,mid)<=get_dist(mid,b)+c){
an = mid;
l = mid+1;
}else r = mid-1;
}
ans = max(ans,pref[an]);
//cout<<an<<endl;
if(an<b)ans = max(ans,MA(0,a,a)+c+MA(an+1,b,b));
int an1 = an;
l = a , r = b , an = -1;
while(l<=r){
int mid = (l+r)/2;
if(get_dist(mid,b)<=get_dist(a,mid)+c){
an = mid;
r = mid-1;
}else l = mid+1;
}
//cout<<an<<endl;
ans = max(ans,suf[an]);
int an2 = an;
if(an>a)ans = max(ans,MA(b,n-1,b)+c+MA(a,an-1,a));
if(an1<an2&&an1>a&&an2<b)ans = max(ans,sumpref[an2]-sumpref[an1]+D[an1]+D[an2]);
return ans;
}
long long find_shortcut(int N,vector<int> l, vector<int> d, int c){
n = N;
for(int i = 0;i<n;i++){
adj[i].clear();
D[i] = d[i];
}
for(int i = 1;i<n;i++){
adj[i-1].push_back({i,l[i-1]});
adj[i].push_back({i-1,l[i-1]});
}
sumpref[0] = 0;
for(int i = 1;i<n;i++){
sumpref[i] = sumpref[i-1]+l[i-1];
}
sumsuf[n-1] = 0;
for(int i = n-2;i>=0;i--){
sumsuf[i] = sumsuf[i+1]+l[i];
}
for(int i = 0;i<n;i++){
tbpref[i][0] = sumpref[i]+d[i];
tbsuf[i][0] = sumsuf[i]+d[i];
}
for(int i =n-1;i>=0;i--){
for(int j =1;j<20;j++){
if(i+(1<<j)-1<n){
tbpref[i][j] = max(tbpref[i][j-1],tbpref[i+(1<<(j-1))][j-1]);
tbsuf[i][j] = max(tbsuf[i][j-1],tbsuf[i+(1<<(j-1))][j-1]);
}
}
}
long long ma = 0;
long long lola = 0;
for(int i = 0;i<n;i++){
lola = max(lola,ma+d[i]);
ma = max(ma,D[i]);
pref[i] = lola;
if(i<n-1){
ma+=l[i];
}
}
ma = 0;
lola = 0;
for(int i = n-1;i>=0;i--){
lola = max(lola,ma+d[i]);
ma = max(ma,D[i]);
suf[i] = lola;
if(i>0){
ma+=l[i-1];
}
}
cnt = n;
int pr[2*n+1] = {0};
for(int i = 0;i<n;i++){
if(d[i]){
pr[cnt] = i;
adj[cnt].clear();
adj[i].push_back({cnt,d[i]});
adj[cnt].push_back({i,d[i]});
cnt++;
}
}
dfs(0,-1,0);
maa = -1;
int f = lol;
dfs(lol,-1,0);
int s = lol;
vector<int> lo;
if(f>=n)f = pr[f];
if(s>=n)s = pr[s];
for(int i = max(0,f-2);i<min(n,f+2);i++)lo.push_back(i);
for(int i = max(0,s-2);i<min(n,s+2);i++)lo.push_back(i);
long long mi = oo;
for(int i = 0;i<n;i++){
for(auto j:lo){
mi = min(mi,shortcut(i,j,c));
}
}
return mi;
}/*
int main(){
cout<<find_shortcut(3,{1000000000,1000000000},{1000000000,1000000000,1000000000},1)<<endl;
}*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
11096 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
3 ms |
11148 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
2 ms |
11100 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
2 ms |
11100 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
4 ms |
11100 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
2 ms |
11100 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
2 ms |
11100 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
2 ms |
11100 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
2 ms |
11100 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
2 ms |
11152 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
3 ms |
11100 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
2 ms |
11100 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
2 ms |
11096 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
2 ms |
11100 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
2 ms |
11100 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
2 ms |
11100 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
2 ms |
11100 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
2 ms |
11100 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
2 ms |
11100 KB |
n = 2, 122 is a correct answer |
23 |
Correct |
2 ms |
11100 KB |
n = 10, 117 is a correct answer |
24 |
Incorrect |
2 ms |
11100 KB |
n = 10, incorrect answer: jury 336 vs contestant 333 |
25 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
11096 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
3 ms |
11148 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
2 ms |
11100 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
2 ms |
11100 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
4 ms |
11100 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
2 ms |
11100 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
2 ms |
11100 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
2 ms |
11100 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
2 ms |
11100 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
2 ms |
11152 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
3 ms |
11100 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
2 ms |
11100 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
2 ms |
11096 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
2 ms |
11100 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
2 ms |
11100 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
2 ms |
11100 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
2 ms |
11100 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
2 ms |
11100 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
2 ms |
11100 KB |
n = 2, 122 is a correct answer |
23 |
Correct |
2 ms |
11100 KB |
n = 10, 117 is a correct answer |
24 |
Incorrect |
2 ms |
11100 KB |
n = 10, incorrect answer: jury 336 vs contestant 333 |
25 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
11096 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
3 ms |
11148 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
2 ms |
11100 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
2 ms |
11100 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
4 ms |
11100 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
2 ms |
11100 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
2 ms |
11100 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
2 ms |
11100 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
2 ms |
11100 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
2 ms |
11152 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
3 ms |
11100 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
2 ms |
11100 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
2 ms |
11096 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
2 ms |
11100 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
2 ms |
11100 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
2 ms |
11100 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
2 ms |
11100 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
2 ms |
11100 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
2 ms |
11100 KB |
n = 2, 122 is a correct answer |
23 |
Correct |
2 ms |
11100 KB |
n = 10, 117 is a correct answer |
24 |
Incorrect |
2 ms |
11100 KB |
n = 10, incorrect answer: jury 336 vs contestant 333 |
25 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
11096 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
3 ms |
11148 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
2 ms |
11100 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
2 ms |
11100 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
4 ms |
11100 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
2 ms |
11100 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
2 ms |
11100 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
2 ms |
11100 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
2 ms |
11100 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
2 ms |
11152 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
3 ms |
11100 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
2 ms |
11100 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
2 ms |
11096 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
2 ms |
11100 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
2 ms |
11100 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
2 ms |
11100 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
2 ms |
11100 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
2 ms |
11100 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
2 ms |
11100 KB |
n = 2, 122 is a correct answer |
23 |
Correct |
2 ms |
11100 KB |
n = 10, 117 is a correct answer |
24 |
Incorrect |
2 ms |
11100 KB |
n = 10, incorrect answer: jury 336 vs contestant 333 |
25 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
11096 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
3 ms |
11148 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
2 ms |
11100 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
2 ms |
11100 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
4 ms |
11100 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
2 ms |
11100 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
2 ms |
11100 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
2 ms |
11100 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
2 ms |
11100 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
2 ms |
11152 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
3 ms |
11100 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
2 ms |
11100 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
2 ms |
11096 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
2 ms |
11100 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
2 ms |
11100 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
2 ms |
11100 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
2 ms |
11100 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
2 ms |
11100 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
2 ms |
11100 KB |
n = 2, 122 is a correct answer |
23 |
Correct |
2 ms |
11100 KB |
n = 10, 117 is a correct answer |
24 |
Incorrect |
2 ms |
11100 KB |
n = 10, incorrect answer: jury 336 vs contestant 333 |
25 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
11096 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
3 ms |
11148 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
2 ms |
11100 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
2 ms |
11100 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
4 ms |
11100 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
2 ms |
11100 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
2 ms |
11100 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
2 ms |
11100 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
2 ms |
11100 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
2 ms |
11152 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
3 ms |
11100 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
2 ms |
11100 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
2 ms |
11096 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
2 ms |
11100 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
2 ms |
11100 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
2 ms |
11100 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
2 ms |
11100 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
2 ms |
11100 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
2 ms |
11100 KB |
n = 2, 122 is a correct answer |
23 |
Correct |
2 ms |
11100 KB |
n = 10, 117 is a correct answer |
24 |
Incorrect |
2 ms |
11100 KB |
n = 10, incorrect answer: jury 336 vs contestant 333 |
25 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
11096 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
3 ms |
11148 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
2 ms |
11100 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
2 ms |
11100 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
4 ms |
11100 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
2 ms |
11100 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
2 ms |
11100 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
2 ms |
11100 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
2 ms |
11100 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
2 ms |
11152 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
3 ms |
11100 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
2 ms |
11100 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
2 ms |
11096 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
2 ms |
11100 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
2 ms |
11100 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
2 ms |
11100 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
2 ms |
11100 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
2 ms |
11100 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
2 ms |
11100 KB |
n = 2, 122 is a correct answer |
23 |
Correct |
2 ms |
11100 KB |
n = 10, 117 is a correct answer |
24 |
Incorrect |
2 ms |
11100 KB |
n = 10, incorrect answer: jury 336 vs contestant 333 |
25 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
11096 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
3 ms |
11148 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
2 ms |
11100 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
2 ms |
11100 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
4 ms |
11100 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
2 ms |
11100 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
2 ms |
11100 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
2 ms |
11100 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
2 ms |
11100 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
2 ms |
11100 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
2 ms |
11152 KB |
n = 3, 3000000000 is a correct answer |
14 |
Correct |
3 ms |
11100 KB |
n = 4, 3000000001 is a correct answer |
15 |
Correct |
2 ms |
11100 KB |
n = 4, 4000000000 is a correct answer |
16 |
Correct |
2 ms |
11096 KB |
n = 5, 4000000000 is a correct answer |
17 |
Correct |
2 ms |
11100 KB |
n = 10, 1000000343 is a correct answer |
18 |
Correct |
2 ms |
11100 KB |
n = 10, 3189 is a correct answer |
19 |
Correct |
2 ms |
11100 KB |
n = 10, 7000000000 is a correct answer |
20 |
Correct |
2 ms |
11100 KB |
n = 5, 12 is a correct answer |
21 |
Correct |
2 ms |
11100 KB |
n = 5, 25 is a correct answer |
22 |
Correct |
2 ms |
11100 KB |
n = 2, 122 is a correct answer |
23 |
Correct |
2 ms |
11100 KB |
n = 10, 117 is a correct answer |
24 |
Incorrect |
2 ms |
11100 KB |
n = 10, incorrect answer: jury 336 vs contestant 333 |
25 |
Halted |
0 ms |
0 KB |
- |