Submission #26407

#TimeUsernameProblemLanguageResultExecution timeMemory
26407zscoderGap (APIO16_gap)C++14
100 / 100
79 ms5924 KiB
#include <bits/stdc++.h>
#include "gap.h"

using namespace std;

#define fi first
#define se second
#define pb push_back
#define mp make_pair

typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> ii;

ll a[100001];

long long findGap(int T, int N)
{
	if(T == 1)
	{
		int l = 0; int r = N - 1;
		ll al, ar;
		al = 0; ar = ll(1e18);
		ll m, n;
		for(int i = 0; i < (N+1)/2; i++)
		{
			MinMax(al, ar, &m, &n);
			a[l] = m;
			a[r] = n;
			l++; r--;
			al = m + 1; ar = n - 1;
		}
		ll ans = 0;
		for(int i = 1; i < N; i++)
		{
			ans = max(ans, a[i] - a[i - 1]);
		}
		return ans;
	}
	else
	{
		ll amin; ll amax;
		ll m, n;
		ll maxd = 0;
		MinMax(0, ll(1e18), &amin, &amax);
		a[0] = amin;
		a[N - 1] = amax;
		if(N == 2) return (amax - amin);
		if(amax - amin == N - 1)
		{
			return 1;
		}
		ll curL = amin;
		ll l = amin + 1; ll r;
		ll d = amax - amin - 1;
		ll q = d/(N - 1);
		ll rem = d%(N - 1);
		for(int i = 0; i < N - 1; i++)
		{
			if(i < rem)
			{
				r = l + q;
			}
			else
			{
				r = l + q - 1;
			}
			MinMax(l, r, &m, &n);
			if(!(m == -1 && n == -1))
			{
				maxd = max(maxd, m - curL);
				curL = n;
			}
			l = r + 1;
		}
		maxd = max(maxd, amax - curL);
		//Remember to d the last element
		return maxd;
	}
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...