Submission #900985

#TimeUsernameProblemLanguageResultExecution timeMemory
900985abcvuitunggioShortcut (IOI16_shortcut)C++17
71 / 100
2016 ms4052 KiB
#include "shortcut.h" #include <bits/stdc++.h> using namespace std; const long long INF=1e18; long long s[1000001]; vector <long long> v; long long find_shortcut(int n, vector <int> l, vector <int> d, int c){ long long lo=0,hi=INF,kq=-1; for (int i=1;i<n;i++){ s[i]=s[i-1]+l[i-1]; v.push_back(s[i]); } sort(v.begin(),v.end()); while (lo<=hi){ long long mid=(lo+hi)>>1,ch=0,mnx=-INF,mxx=INF,mny=-INF,mxy=INF; for (int i=0;i<n;i++) for (int j=i+1;j<n;j++) if (s[j]-s[i]+d[i]+d[j]>mid){ long long sz=mid-d[i]-d[j]-c,a=s[i],b=s[j]-sz,c=s[i],d=s[j]+sz; mnx=max(mnx,a+b); mxx=min(mxx,c+d); mny=max(mny,c-d); mxy=min(mxy,a-b); } for (int i=0;i<n;i++){ long long l=max(mnx-s[i],s[i]-mxy),r=min(mxx-s[i],s[i]-mny); int x=lower_bound(v.begin(),v.end(),l)-v.begin(),y=upper_bound(v.begin(),v.end(),r)-v.begin()-1; if (x<=y) ch=1; } if (ch){ kq=mid; hi=mid-1; } else lo=mid+1; } return kq; }
#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...