This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
#define fi first
#define se second
#define pf printf
#define pb push_back
#define all(x) x.begin(),x.end()
#define LINF 1023456789123456789
#define maxn 1000005
int n,c;
vector<int> d;
ll x[maxn];
bool pos(ll k){
ll mnsm=-LINF,mxsm=LINF,mndf=-LINF,mxdf=LINF,add=0,sub=LINF;
bool have=false;
deque<int> dq;
for(int i=0;i<n;++i){
while(!dq.empty()&&x[i]-x[dq.front()]+d[i]+d[dq.front()]>k){
int j=dq.front();dq.pop_front();
add=max(add,x[j]+d[j]);
sub=min(sub,x[j]-d[j]);
have=true;
}
if(have){
mxsm=min(mxsm,x[i]-d[i]+sub+k-c);
mnsm=max(mnsm,x[i]+d[i]+add-k+c);
mxdf=min(mxdf,x[i]-d[i]-add+k-c);
mndf=max(mndf,x[i]+d[i]-sub-k+c);
}
while(!dq.empty()&&x[i]-d[i]<x[dq.back()]-d[dq.back()]){
dq.pop_back();
}
dq.push_back(i);
}
if(mxsm<mnsm||mxdf<mndf)return false;
int l1=n,r1=n-1,l2=0,r2=-1;
for(int i=0;i<n;++i){
while(l1!=0&&mnsm<=x[i]+x[l1-1])--l1;
while(r1!=-1&&mxsm<x[i]+x[r1])--r1;
while(l2!=n&&mxdf<x[i]-x[l2])++l2;
while(r2!=n-1&&mndf<=x[i]-x[r2+1])++r2;
if(max(l1,l2)<=min(r1,r2)&&max(l1,l2)<=i)return true;
}
return false;
}
ll find_shortcut(int _n,vector<int> l,vector<int> _d,int _c){
n=_n,c=_c,d=_d;
for(int i=0;i<n;++i){
if(i!=0)x[i]=x[i-1]+l[i-1];
}
ll lo=1,hi=1e18,mid,res;
while(lo<=hi){
mid=(lo+hi)>>1;
if(pos(mid))res=mid,hi=mid-1;
else lo=mid+1;
}
return res;
}
Compilation message (stderr)
shortcut.cpp: In function 'll find_shortcut(int, std::vector<int>, std::vector<int>, int)':
shortcut.cpp:65:9: warning: 'res' may be used uninitialized in this function [-Wmaybe-uninitialized]
65 | return res;
| ^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |