#include<bits/stdc++.h>
#include "shortcut.h"
using namespace std;
#define ll long long
#define pb push_back
#define eb emplace_back
#define all(vr) vr.begin(),vr.end()
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define mp make_pair
const int N=1e6+10;
const ll inf=1e18;
ll p[N],val[N],n,c,ps[N],ss[N],best_ps[N],best_ss[N];
ll cal(int l,int r)
{
ll res=max(ps[l],ss[r]);
ll dis=p[r]-p[l]+c;
ll tmp1=val[l],tmp2=val[r];
val[l]=best_ps[l]+p[l];
val[r]=best_ss[r]+(p[n]-p[r]);
deque<int> q;
q.push_front(l);
ll best=-inf;
for (int i=l+1;i<=r;i++)
{
while (!q.empty() && p[i]-p[q.back()]>dis/2)
{
best=max(best,p[q.back()]+val[q.back()]);
q.pop_back();
}
res=max(res,dis-p[i]+best+val[i]);
if (!q.empty()) res=max(res,p[i]+val[i]-p[q.back()]+val[q.back()]);
while (!q.empty() && -p[i]+val[i]>=-p[q.front()]+val[q.front()]) q.pop_front();
q.push_front(i);
}
val[l]=tmp1,val[r]=tmp2;
return res;
}
void build()
{
for (int i=1;i<=n;i++)
{
ps[i]=max(ps[i-1],p[i]+val[i]+best_ps[i-1]);
best_ps[i]=max(best_ps[i-1],-p[i]+val[i]);
}
for (int i=n;i;i--)
{
ss[i]=max(ss[i+1],p[n]-p[i]+val[i]+best_ss[i+1]);
best_ss[i]=max(best_ss[i+1],-(p[n]-p[i])+val[i]);
}
}
int lef(int x,int d, ll val,int l,int r)
{
int ans=d;
while (l<=r)
{
int mid=(l+r)/2;
if (cal(x,mid)==val) ans=mid,r=mid-1;
else l=mid+1;
}
return ans;
}
int rig(int x,int d, ll val,int l,int r)
{
int ans=d;
while (l<=r)
{
int mid=(l+r)/2;
if (cal(x,mid)==val) ans=mid,l=mid+1;
else r=mid-1;
}
return ans;
}
ll best_r(int x)
{
int l=x+1,r=n;
ll ans=inf;
while (l<=r)
{
int mid=(l+r)/2;
ll v=cal(x,mid);
ans=min(ans,v);
int l2=lef(x,mid,v,l,mid-1),r2=rig(x,mid,v,mid+1,r);
if (l2>l)
{
ll vl=cal(x,l2-1);
if (vl<v)
{
ans=min(ans,vl);
r=l2-2;
continue;
}
}
if (r2<r)
{
ll vr=cal(x,r2+1);
if (vr<v)
{
ans=min(ans,vr);
l=vr+2;
continue;
}
}
break;
}
return ans;
}
ll best()
{
ll ans=inf;
/*int l=1,r=n;
while (l<=r)
{
int mid1=(l*2+r)/3,mid2=(l+r*2)/3;
ll val1=best_r(mid1),val2=best_r(mid2);
if (val1<val2) r=val2-1,ans=min(ans,val1);
else l=val1+1,ans=min(ans,val2);
}*/
/*for (int l=1;l<n;l++)
for (int r=l+1;r<=n;r++) ans=min(ans,cal(l,r));*/
/*int r=2,l=2;
for (int i=1;i<n;i++)
{
l=max(l,i+1);
r=max(r,l);
ll res=cal(l,r);
if (r==n)
{
ans=min(ans,res);
continue;
}
ll new_res=cal(l,r+1);
while (new_res<=res)
{
res=new_res;
r++;
if (r==n) break;
new_res=cal(l,r+1);
}
ans=min(ans,res);
}*/
for (int i=1;i<n;i++) ans=min(ans,best_r(i));
return ans;
}
ll find_shortcut(int x,vector<int> l,vector<int> d,int y)
{
n=x;
c=y;
val[1]=d[0];
for (int i=2;i<=n;i++) p[i]=p[i-1]+l[i-2],val[i]=d[i-1];
build();
return best();
}
/*void read()
{
cin>>n>>c;
for (int i=2,x;i<=n;i++) cin>>x,p[i]=p[i-1]+x;
for (int i=1;i<=n;i++) cin>>val[i];
}
int main()
{
freopen("ss.inp","r",stdin);
ios::sync_with_stdio(false);
cin.tie(0);
read();
build();
cout<<best();
return 0;
}*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
384 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
384 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
0 ms |
384 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
384 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
384 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
0 ms |
384 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
0 ms |
384 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
0 ms |
384 KB |
n = 2, 3000000000 is a correct answer |
12 |
Runtime error |
3 ms |
488 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
384 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
384 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
0 ms |
384 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
384 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
384 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
0 ms |
384 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
0 ms |
384 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
0 ms |
384 KB |
n = 2, 3000000000 is a correct answer |
12 |
Runtime error |
3 ms |
488 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
384 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
384 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
0 ms |
384 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
384 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
384 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
0 ms |
384 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
0 ms |
384 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
0 ms |
384 KB |
n = 2, 3000000000 is a correct answer |
12 |
Runtime error |
3 ms |
488 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
384 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
384 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
0 ms |
384 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
384 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
384 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
0 ms |
384 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
0 ms |
384 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
0 ms |
384 KB |
n = 2, 3000000000 is a correct answer |
12 |
Runtime error |
3 ms |
488 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
384 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
384 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
0 ms |
384 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
384 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
384 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
0 ms |
384 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
0 ms |
384 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
0 ms |
384 KB |
n = 2, 3000000000 is a correct answer |
12 |
Runtime error |
3 ms |
488 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
384 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
384 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
0 ms |
384 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
384 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
384 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
0 ms |
384 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
0 ms |
384 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
0 ms |
384 KB |
n = 2, 3000000000 is a correct answer |
12 |
Runtime error |
3 ms |
488 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
384 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
384 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
0 ms |
384 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
384 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
384 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
0 ms |
384 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
0 ms |
384 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
0 ms |
384 KB |
n = 2, 3000000000 is a correct answer |
12 |
Runtime error |
3 ms |
488 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
384 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
384 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
0 ms |
384 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
384 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
1 ms |
384 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
0 ms |
384 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
384 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
0 ms |
384 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
0 ms |
384 KB |
n = 2, 3000000000 is a correct answer |
12 |
Runtime error |
3 ms |
488 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
13 |
Halted |
0 ms |
0 KB |
- |