제출 #251438

#제출 시각아이디문제언어결과실행 시간메모리
251438atoizGap (APIO16_gap)C++14
70 / 100
59 ms1272 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 maxGap = 1;
	if (T == 2) {
		long long L, R;
		long long X = 1e18;
		MinMax(0, X, &L, &R);
		maxGap = (R - L + N - 2) / (N - 1);
		if (N == 2) return R - L;
		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 {
		long long L, R;
		long long X = 1e18;
		MinMax(0, X, &L, &R);
		while (L < R) {
			long long A, B;
			MinMax(L + 1, R - 1, &A, &B);
			if (A == -1) {
				if (maxGap < R - L) maxGap = R - L;
				break;
			}
			if (maxGap < A - L) maxGap = A - L;
			if (maxGap < R - B) maxGap = R - B;
			L = A, R = B;
		}
	}
	return maxGap;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...