Submission #48388

#TimeUsernameProblemLanguageResultExecution timeMemory
48388BTheroGap (APIO16_gap)C++17
100 / 100
75 ms2940 KiB
// Why am I so stupid? :c
#include <bits/stdc++.h>
#include "gap.h"

#define pb push_back
#define mp make_pair

#define all(x) (x).begin(), (x).end()

#define fi first
#define se second

typedef long long ll;

using namespace std;

long long findGap(int t, int n) {
    ll arr[n * 2 + 5], que[2], ret = 0;
    int sz = 0;

    if (n <= 5 || t == 1) {
        arr[0] = 0, arr[n + 1] = (ll)1e18 + 1;
        int l = 1, r = n;

        while (l <= r) {
            MinMax(arr[l - 1] + 1, arr[r + 1] - 1, arr + l, arr + r);
            ++l, --r;
        }

        for (int i = 1; i < n; ++i) {
            ret = max(ret, arr[i + 1] - arr[i]);
        }
    }
    else {
        MinMax(1, (ll)1e18, que, que + 1);
        ll l = que[0], r = que[1];

        arr[++sz] = l++;
        arr[++sz] = r--;

        ll a = (r - l + 1) / (n - 1);
        ll b = (r - l + 1) % (n - 1);
        ll cur = l;

        for (int i = 1; i < n; ++i) {
            ll len = a;

            if (b > 0) {
                ++len, --b;
            }

            MinMax(cur, cur + len - 1, que, que + 1);

            if (que[0] != -1) {
                arr[++sz] = que[0];
                arr[++sz] = que[1];
            }

            cur += len;
        }

        sort(arr + 1, arr + sz + 1);
        sz = unique(arr + 1, arr + sz + 1) - arr - 1;

        for (int i = 1; i < sz; ++i) {
            ret = max(ret, arr[i + 1] - arr[i]);
        }
    }

    return ret;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...