제출 #652596

#제출 시각아이디문제언어결과실행 시간메모리
652596jamezzzShortcut (IOI16_shortcut)C++17
100 / 100
1691 ms53584 KiB
#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; }

컴파일 시 표준 에러 (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 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...