제출 #101268

#제출 시각아이디문제언어결과실행 시간메모리
101268ae04071Gap (APIO16_gap)C++11
42.89 / 100
91 ms1272 KiB
#include "gap.h" #include <bits/stdc++.h> #define fi first #define se second #define sz(x) ((int)(x).size()) using namespace std; using lli=long long; using pll=pair<lli,lli>; const lli INF=1000000000000000000ll; lli sub1(int n) { lli mx=0, lv=-1, rv=INF+1; for(int i=0;i<(n+1)/2;i++) { lli s=lv, t=rv, l, r; MinMax(s+1, t-1, &l, &r); if(i!=0) { mx = max(mx, l-lv); mx = max(mx, rv-r); } lv = l; rv = r; } if(!(n&1)) mx = max(mx, rv-lv); return mx; } lli mx=0; int SEG = 2; pll dfs(lli lv,lli rv) { if(lv>rv) return pll(-1,-1); lli s=lv, t=rv, l,r; MinMax(s,t,&l,&r); if(l==-1) return pll(-1, -1); else if(l==r) return pll(l,l); else { pll lt = dfs(l+1, (l+r)/2); pll rt = dfs((l+r)/2+1, r-1); if(lt.fi!=-1) { mx = max(mx, lt.fi-l); } else if(rt.fi!=-1) { mx = max(mx, rt.fi-l); } else mx = max(mx, r-l); if(rt.se!=-1) mx = max(mx,r-rt.se); else if(lt.se!=-1) mx = max(mx, r-lt.se); else mx = max(mx, (r-l)); if(lt.se!=-1 && rt.fi!=-1) mx = max(mx, rt.fi-lt.se); return pll(l, r); } } lli sub2(int n) { dfs(0, INF); return mx; } long long findGap(int T, int N) { mx=0; if(N<=10 || T==1) return sub1(N); else return sub2(N); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...