제출 #1324308

#제출 시각아이디문제언어결과실행 시간메모리
1324308tamzidGap (APIO16_gap)C++20
30 / 100
2120 ms589824 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;
using ll = long long;

long long findGap(int T, int N)
{
	if(T == 1) {
        vector<ll> a(N);
		ll l = 0, r = 1e18;
		int i = 0, j = N - 1;
		while(i <= j) {
			ll mn, mx;
			MinMax(l, r, &mn, &mx);
			a[i] = mn;
			a[j] = mx;
			l = mn + 1;
			r = mx - 1;
			++i;
			--j;
		}
        ll ans = 0;
        for(int i=0;i<N-1;++i)
            ans = max(ans, a[i + 1] - a[i]);
        return ans;
	} else {
        vector<ll> a;
		ll mn, mx;
        MinMax(0, 1e18, &mn, &mx);
        ll l = mn, r = mx;
        a.push_back(mn);
        a.push_back(mx);
        ++l;
        --r;
        ll gaps = (mx - mn + N - 1) / N;
        for(ll i=1;i<=N&&a.size()<N;++i) {
            ll st = (gaps + l) * i, en = min(r, (gaps * (i + 1)) - 1);
            ll mn = -1, mx = -1;
            int c = 0;
            while((c == 0 || (c != 0 && mn != mx)) && st <= en) {
                MinMax(st, en, &mn, &mx);
                if(mn != -1) {
                    a.push_back(mn);
                    ++st;
                    if(mn != mx) {
                        a.push_back(mx);
                    }
                    --en;
                }
                ++c;
            }
        }
        sort(a.begin(), a.end());
        ll ans = 0;
        for(int i=0;i<N-1;++i)
            ans = max(ans, a[i + 1] - a[i]);
        return ans;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...