제출 #61156

#제출 시각아이디문제언어결과실행 시간메모리
61156Eae02Gap (APIO16_gap)C++14
19.72 / 100
86 ms1516 KiB
#include "gap.h"

#include <bits/stdc++.h>

using ll = long long;

ll gMaxDiff = 0;

void maxDiff(ll min, ll max)
{
	ll mid = min + (max - min) / 2;
	
	ll s1Min, s1Max;
	MinMax(min + 1, mid, &s1Min, &s1Max);
	bool s1Pop = s1Min != -1;
	
	ll s2Min, s2Max;
	MinMax(mid + 1, max - 1, &s2Min, &s2Max);
	bool s2Pop = s2Min != -1;
	
	if (s1Pop && s2Pop)
	{
		gMaxDiff = std::max(gMaxDiff, s2Min - s1Max);
		gMaxDiff = std::max(gMaxDiff, s1Min - min);
		gMaxDiff = std::max(gMaxDiff, max - s2Max);
	}
	else if (!s1Pop && s2Pop)
	{
		gMaxDiff = std::max(gMaxDiff, s2Min - min);
		gMaxDiff = std::max(gMaxDiff, max - s2Max);
	}
	else if (s1Pop && !s2Pop)
	{
		gMaxDiff = std::max(gMaxDiff, s1Min - min);
		gMaxDiff = std::max(gMaxDiff, max - s1Max);
	}
	else if (!s1Pop && !s2Pop)
	{
		gMaxDiff = std::max(gMaxDiff, max - min);
	}
	
	if (s1Pop && s1Max - s1Min > gMaxDiff)
		maxDiff(s1Min, s1Max);
	if (s2Pop && s2Max - s2Min > gMaxDiff)
		maxDiff(s2Min, s2Max);
}

long long findGap(int T, int N)
{
	ll min, max;
	MinMax(0, 1000000000000000000, &min, &max);
	
	maxDiff(min, max);
	
	return gMaxDiff;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...