Submission #600497

#TimeUsernameProblemLanguageResultExecution timeMemory
600497A_DShortcut (IOI16_shortcut)C++14
0 / 100
0 ms212 KiB
#include "shortcut.h" #include <bits/stdc++.h> using namespace std; const int N=1e6+100; long long pre[N]; long long suf[N]; long long cc; long long ok1(int u,int l,int r) { long long ret1=pre[u]; long long ret2=suf[u]-suf[r]+cc+pre[l]; return min(ret1,ret2); } long long ok2(int u,int l,int r) { long long ret1=suf[u]; long long ret2=pre[u]-pre[l]+cc+suf[r]; return min(ret1,ret2); } long long con(int l,int r) { long long ret=pre[l]+suf[r]; long long l1=l,r1=r; while(l1<=r1){ int mid=(l1+r1)/2; long long u=ok1(mid,l,r); long long v=ok1(mid+1,l,r); ret=max(ret,u); ret=max(ret,v); if(u>v){ r1=mid-1; } else{ l1=mid+2; } } l1=l,r1=r; while(l1<=r1){ int mid=(l1+r1)/2; long long u=ok2(mid,l,r); long long v=ok2(mid+1,l,r); ret=max(ret,u); ret=max(ret,v); if(u>v){ r1=mid-1; } else{ l1=mid+2; } } return ret; } long long find_shortcut(int n,vector<int> l,vector<int> d,int c) { cc=c; pre[0]=d[0]; for(int i=1;i<n;i++){ pre[i]=max(pre[i-1]+(long long)l[i-1],(long long)d[i]); } suf[n-1]=d[n-1]; for(int i=n-1-1;i>=0;i--){ suf[i]=max(suf[i+1]+(long long)l[i],(long long)d[i+1]); } long long ans=1e18; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ ans=min(ans,con(i,j)); } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...