Submission #873709

#TimeUsernameProblemLanguageResultExecution timeMemory
873709StefanL2005Gap (APIO16_gap)C++14
100 / 100
38 ms3872 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;
#define ll long long
 
ll findGap(int T, int N)
{
    vector<ll> v(N);
    ll maxDif = 0;

    if (T == 1)
    {
        int p1 = 0, p2 = N - 1;
        ll a = -1, b = 1LL * 1000 * 1000 * 1000 * 1000 * 1000 * 1000+ 1;
 
        while (p1 <= p2)
        {
            ll c1, c2;
            MinMax(a + 1, b - 1, &c1, &c2);
            v[p1] = c1;
            v[p2] = c2;
            p1++; p2--;
            a = c1; b = c2;
        }
 
        for (int i = 1; i < N; i++)
            maxDif = max(maxDif, v[i] - v[i - 1]);
    }
    else
    {
        ll start, finish;
        MinMax(0, 1LL * 1000 * 1000 * 1000 * 1000 * 1000 * 1000, &start, &finish);
        maxDif = 1 + (finish - start + 1 - N) / (N - 1); 
        
        while (start != finish)
        { 
            ll p = maxDif;
            ll a, b;

            MinMax(start + 1, start + 1 + p, &a, &b);
            while (b == -1)
            {
                p*=2;
                if (start + 1 + p >= finish)
                    MinMax(start + 1, finish, &a, &b);
                else
                    MinMax(start + 1, start + 1 + p, &a, &b);
            }

            maxDif = max(maxDif, a - start);
            start = b;
        }
    }
    return maxDif;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...