#include <bits/stdc++.h>
#include "gap.h"
using namespace std;
using ll = long long;
ll findGap1(int N)
{
    ll lo = 0;
    ll hi = 1000000000000000000;
    int calls = (N+1)/2;
    vector<ll> arr;
    for (int x=0; x<calls; x++)
    {
        ll ai, ani;
        MinMax(lo, hi, &ai, &ani);
        if (ai!=-1)
        {
            arr.push_back(ai);
            arr.push_back(ani);
            lo = ai+1;
            hi = ani-1;
        }
    }
    sort(arr.begin(), arr.end());
    ll max_diff = 0;
    for (int i=0; i<(arr.size()-1); i++)
    {
        max_diff = max(max_diff, arr[i+1]-arr[i]);
        //cout << arr[i+1]-arr[i] << '\n';
    }
    return max_diff;
}
ll findGap2(ll N)
{
    ll lo, hi;
    MinMax(0, 1000000000000000000, &lo, &hi);
    ll partition = (hi-lo+1)/N;
    ll rem = (hi-lo+1)%N;
    ll curr = lo;
    vector<ll> arr = {hi};
    for (ll i=0; i<N; i++)
    {
        ll diff = partition;
        if (i < rem)
            diff++;
        ll a, b;
        a=-1;b=-1;
        if (curr==lo)
        {
            if (diff >= 2)
                MinMax(curr+1, curr+diff-1ll, &a, &b);
        }
        else if ((curr+diff-1ll) == hi)
        {
            if (diff >= 2)
                MinMax(curr, curr+diff-2ll, &a, &b);
        }
        else
        {
            MinMax(curr, curr+diff-1ll, &a, &b);
            arr.push_back(a);
            arr.push_back(b);
        }
        curr = curr+diff;
    }
    ll max_diff = 0;
    sort(arr.begin(), arr.end());
    for (int i=0; i<(arr.size()-1); i++)
        if (arr[i]!=-1ll)
        {
            max_diff = max(max_diff, arr[i+1]-arr[i]);
            //cout << i << ' ' << arr[i+1] << ' ' << arr[i] << '\n';
        }
    return max_diff;
}
ll findGap(int T, int N)
{
    if (T==1)
        return findGap1(N);
    return findGap2(N);
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |