Submission #400126

#TimeUsernameProblemLanguageResultExecution timeMemory
400126dxz05Gap (APIO16_gap)C++14
100 / 100
61 ms1876 KiB
#include "gap.h"
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 555555;
const long long INF = 1e18 + 2e2;

typedef long long ll;

ll a[MAXN];

long long findGap(int SUBTASK, int n){
    if (SUBTASK == 1){
        ll mn = 0, mx = 1e18;
        for (int i = 1; i <= (n + 1) / 2; i++){
            MinMax(mn, mx, &a[i], &a[n - i + 1]);
            mn = a[i] + 1;
            mx = a[n - i + 1] - 1;
        }

        ll ans = 0;
        for (int i = 1; i < n; i++) ans = max(ans, a[i + 1] - a[i]);

        return ans;
    } else {
        ll mn, mx;
        MinMax(0, INF, &mn, &mx);

        a[1] = mn;
        a[n] = mx;

        ll x = (mx - mn + n - 2) / (n - 1) + 1;

        ll ans = x - 1;

        ll l = mn + 1, last = mn;
        while (last + x < a[n]){
            MinMax(l, l + x - 1, &mn, &mx);
            if (mn == -1){
                l += x;
            } else {
                ans = max(ans, mn - last);
                last = mx;
                l = last + 1;
            }
            x = max(ans, x + 1);
        }

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