Submission #1085164

#TimeUsernameProblemLanguageResultExecution timeMemory
1085164TimoshGap (APIO16_gap)C++17
100 / 100
51 ms5912 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;

long long mn = 0, mx = 0;
set<long long> st;

long long findGap(int T, int N)
{
	long long lim = 1e18;
	long long ans = 1;
	long long n = N;
	if (T == 2 && N >= 4)
	{
		MinMax(0, lim, &mn, &mx);
		long long left = mn;
		long long l = mn + 1, r = mx - 1;
		long long ans = 1;
		long long last = mn;
		if (mx - mn == N - 1)
			return 1;
		if (mx - mn == N)
			return 2;
		for (int i = 0; i < N; i++)
		{
			long long nxt = l + (r - left) / n - 1 + (i >= n - (r - left) % n && (r - left) % n);
			MinMax(l, nxt, &mn, &mx);
			l = nxt + 1;
			if (mn != -1)
			{
				ans = max(ans, mn - last);
				last = mx;
			}
		}
		ans = max(ans, r - last + 1);
		return ans;
	}
	else
	{
		long long l = 0, r = 1e18;
		while (1)
		{
			MinMax(l, r, &mn, &mx);
			if (mn == -1)
				break;
			st.insert(mn);
			st.insert(mx);
			l = mn + 1, r = mx - 1;
			if (mn == mx || (long long)st.size() >= N)
				break;
		}
	}
	long long last = *st.begin();
	for (auto &i : st)
		ans = max(ans, i - last), last = i;
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...