Submission #101265

#TimeUsernameProblemLanguageResultExecution timeMemory
101265ae04071Gap (APIO16_gap)C++11
0 / 100
75 ms3072 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=INF, lv=-INF, rv=INF+INF;
    for(int i=0;i<(n+1)/2;i++) {
        lli s=lv, t=rv, l, r;
        MinMax(s+1, t-1, &l, &r);
        mx = min(mx, l-lv);
        mx = min(mx, rv-r);
        lv = l; rv = r;
    }
    if(!(n&1)) mx = min(mx, rv-lv);
    return mx;
}
lli mx=INF;
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 = min(mx, lt.fi-l);
        } else if(rt.fi!=-1) {
            mx = min(mx, rt.fi-l);
        } else mx = min(mx, r-l);

        if(rt.se!=-1) mx = min(mx,r-rt.se);
        else if(lt.se!=-1) mx = min(mx, r-lt.se);
        else mx = min(mx, (r-l));
        
        if(lt.se!=-1 && rt.fi!=-1) mx = min(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=INF;

    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...