Submission #713205

#TimeUsernameProblemLanguageResultExecution timeMemory
713205vjudge1Gap (APIO16_gap)C++17
100 / 100
64 ms1860 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;
#define ll long long
const int maxn = 1e5 + 10;
int n;
ll a[maxn];
ll sub1()
{
    int l=1; int r=n;
    ll s = 0; ll t = 1e18;
    while (l<=r)
    {
        ll *mx, *mn;
        ll mmax, mmin;
        mx = &mmax; mn = &mmin;
//        cerr<<l<<' '<<r<<' '<<s<<' '<<t<<endl;
        MinMax(s,t,mn,mx);
        s = (mmin)+1; t = (mmax)-1;
        a[l++]=mmin;
        a[r--]=mmax;
    }
    ll ans = 0;
    for (int i=2; i<=n; i++)
    {

        if (ans<a[i]-a[i-1]) ans=a[i]-a[i-1];
    }
    return ans;
}

set<ll> b;


ll sub2()
{
    ll s, t, mmin, mmax;
    ll *mn, *mx;
    mn = &mmin; mx = &mmax;
    s=0; t=1e18;
    MinMax(s,t,mn,mx);
    ll l,r;
    l=mmin; r=mmax;
    ll L = mmax - mmin;
    ll dist = L / (n-1);
    ll ans = dist;
    ll last = l;
    ll last_max = -1;
//    cerr<<dist<<endl;
    for (int i=1; i<n; i++)
    {
        ll next = min(r, last + dist);
        s = last; t = next;
        MinMax(s,t,mn,mx);
        if (mmin != -1)
        {

//        cerr<<last_max<<' '<<mmin<<' '<<mmax<<endl;
        if (last_max != -1) ans = max(ans, mmin - last_max);
        last_max = mmax;
        }
        last = next+1;
        if (last > r) break;
    }
    return ans;
}

ll findGap(int T, int N)
{
    n=N;
//    cerr<<":>"<<endl;
    if (T==1) return sub1();
    else return sub2();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...