Submission #101273

#TimeUsernameProblemLanguageResultExecution timeMemory
101273ae04071Gap (APIO16_gap)C++11
46.58 / 100
99 ms1276 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 = 3; 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 { lli pr = l, ints=l; for(int i=0;i<SEG;i++) { lli s = ints+1, t=ints+1+(r-l)/SEG+1; //printf("%lld %lld, %lld %lld\n",l,r,s,t); if(s>=r) break; if(t>=r) t=r-1; pll tmp = dfs(s, t); if(tmp.fi!=-1) { //printf("#%lld %lld\n",l, tmp.fi); //printf("#%lld %lld\n",tmp.fi,tmp.se); mx = max(mx, tmp.fi-pr); pr=tmp.se; //printf("@%lld\n",pr); } ints = t; } //printf("@%lld %lld\n",pr,r); mx = max(mx, r-pr); 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...