제출 #1325802

#제출 시각아이디문제언어결과실행 시간메모리
1325802QuocSenseiGap (APIO16_gap)C++20
83.51 / 100
40 ms2300 KiB
#include "gap.h"
#include <bits/stdc++.h>

#define ll long long 
#define el cout << '\n'

using namespace std;

const ll INF = 1e18;

ll findGap(int T, int N)
{
    ll ans = 0;
    if (T == 1)
    {
        vector<ll> a;
        ll l = 1, r = INF;
        while (a.size() < N)
        {
            ll mn = INF, mx = -INF;
            MinMax(l, r, &mn, &mx);
            if (mn == -1)
                break;
            a.push_back(mn);
            a.push_back(mx);
            l = mn + 1;
            r = mx - 1;
        }
        sort(a.begin(), a.end());
        for (int i = 0; i < a.size() - 1; i++)
            ans = max(ans, a[i + 1] - a[i]);
    }
    else
    {
        ll st = INF, en = -INF;
        MinMax(0, INF, &st, &en);
        ll L = en - st;
        ll X = L / (N - 1) - 1;
        ll x = st;
        ll premx = -1;
        // cout << L << ' ' << X << endl;
        while (x <= en)
        {
            ll mn = INF, mx = -INF;
            ll nxx = x + X + 1;
            MinMax(x, nxx - 1, &mn, &mx);
            // cout << x << ' ' << nxx << ' ' << mn << ' ' << mx << endl;
            if (premx != -1 && mx != -1)
                ans = max(ans, mn - premx);
            if (mx != -1)
                premx = mx;
            x = nxx;
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...