제출 #720865

#제출 시각아이디문제언어결과실행 시간메모리
720865JoshcGap (APIO16_gap)C++11
100 / 100
46 ms2000 KiB
#include "gap.h"
#include <bits/stdc++.h>
using namespace std;
 
using ll = long long;
 
const ll INF = 1e18;

ll ceildiv(ll a, ll b) {
    return (a+b-1) / b;
}
 
ll findGap(int T, int N) {
    if (T == 1 || N <= 10) {
        vector<ll> a(N);
        int l = 0, r = N-1;
        ll p = -1, q = INF+1;
        while (l <= r) {
            MinMax(p+1, q-1, &p, &q);
            a[l++] = p;
            a[r--] = q;
        }
        ll res = 0;
        for (int i=1; i<N; i++) res = max(res, a[i] - a[i-1]);
        return res;
    } else {
        ll l = 0, big, p, q;
        MinMax(0, INF, &l, &big);
        ll res = ceildiv(big-l, N-1);
        while (l < big) {
            ll sz = res+1;
            bool reachedEnd = false;
            while (true) {
                MinMax(l+1, min(INF, l+sz), &p, &q);
                if (l+sz >= INF && p == -1) {
                    reachedEnd = true;
                    break;
                }
                if (q != -1) break;
                sz *= 2;
            }
            res = max(res, p-l);
            l = q;
            if (reachedEnd) break;
        }
        return res;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...