제출 #1345908

#제출 시각아이디문제언어결과실행 시간메모리
1345908dyedhueGap (APIO16_gap)C++20
30 / 100
2096 ms1216 KiB
#include "gap.h"
#include<bits/stdc++.h>
using namespace std;

long long findGap(int T, int N)
{
	if(T == 1)
	{
		long long mn, mx;
		long long left = 0, right = 1000000000000000000;
		long long gap = 1;

		MinMax(left, right, &mn, &mx);
		left = mn + 1;
		right = mx - 1;

		int i = 1;
		while(left <= right)
		{
			if(i == (N+1)/2)
			{
				gap = max(gap, mx - mn);
				break;
			}
			long long newmn, newmx;
			MinMax(left, right, &newmn, &newmx);
			gap = max(max(gap, newmn - mn), mx - newmx);
			left = newmn + 1;
			right = newmx - 1;

			mn = newmn;
			mx = newmx;
			i++;
		}

		return gap;
	}
	else
	{
		long long mn, mx;
		long long left = 0, right = 1000000000000000000;

		MinMax(left, right, &mn, &mx);
		long long rightmost = mx;
		long long gap = (mx - mn + N-2)/(N-1);
		
		left = mn + 1;
		right = mn + gap;
		long long curgap = 0;

		while(1)
		{
			MinMax(left, right, &mn, &mx);
			if(mn == -1)
			{
				curgap += gap;
				left = right + 1;
				right = left + gap -1;
			}
			else
			{
				curgap += mn - left + 1;
				gap = max(gap, curgap);
				curgap = 0;
				left = mx + 1;
				right = mx + gap;
			}
			if(mn == rightmost) break;
		}
		return gap;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...