Submission #251441

#TimeUsernameProblemLanguageResultExecution timeMemory
251441atoizGap (APIO16_gap)C++14
100 / 100
59 ms1172 KiB
#include "gap.h"
#include <cassert>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <iostream>

using namespace std;

long long findGap(int T, int N)
{
	long long L, R;
	long long X = 1e18;
	MinMax(0, X, &L, &R);
	long long maxGap = (R - L + N - 2) / (N - 1);
	if (N == 2) return R - L;
	if (T == 2) {
		while (R - L > maxGap) {
			long long gap = maxGap;
			while (true) {
				long long A, B;
				MinMax(L + 1, L + gap + 1, &A, &B);
				if (A == -1) { gap *= 2; continue; }
				if (maxGap < A - L) maxGap = A - L;
				L = B;
				break;
			}
		}
	} else {
		for (int i = N - 2; i > 0; i -= 2) {
			long long A, B;
			MinMax(L + 1, R - 1, &A, &B);
			if (maxGap < A - L) maxGap = A - L;
			if (maxGap < R - B) maxGap = R - B;
			L = A, R = B;
		}
		if (maxGap < R - L) maxGap = R - L;
	}
	return maxGap;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...