Submission #108026

#TimeUsernameProblemLanguageResultExecution timeMemory
108026luciocfGap (APIO16_gap)C++14
38.81 / 100
877 ms2156 KiB
#include <bits/stdc++.h>
#include "gap.h"

using namespace std;

const int maxn = 1e5+10;
const long long maxv = 1e18;

typedef long long ll;

ll a[maxn];

long long findGap(int T, int N)
{
	if (T == 1)
	{
		ll mn, mx;
		MinMax(0, maxv, &mn, &mx);

		int l = 1, r = N;
		a[1] = mn, a[N] = mx;

		while (true)
		{
			if (r-l <= 1) break;

			MinMax(a[l]+1, a[r]-1, &mn, &mx);

			a[++l] = mn, a[--r] = mx;
		}

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

		return ans;
	}

	ll s = 0;

	for (int l = 1; l <= N; l++)
	{
		ll mn = -1, mx = -1;

		for (ll i = 0; i < 60 && s+(1LL<<i) <= maxv; i++)
		{
			ll t = s+(1LL<<i);

			MinMax(s, t, &mn, &mx);

			if (mn != -1 && mx != -1) break;
		}

		if (mn == -1)
			MinMax(s, maxv, &mn, &mx);

		a[l] = mn; s = a[l]+1;
	}

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

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