제출 #45269

#제출 시각아이디문제언어결과실행 시간메모리
45269nibnalinGap (APIO16_gap)C++17
78.54 / 100
125 ms2268 KiB
#include <iostream>
#include <cstdio>
#include <vector>
#include "gap.h"
using namespace std;

typedef long long int lli;

const lli maxn = lli(1e5)+5, inf = lli(1e18)+1;

lli ans = 0, A[maxn];

void sub1(lli n)
{
	pair<lli, lli> range = {0, inf};
	lli L = 0, R = n-1;
	while(L <= R)
	{
		MinMax(range.first, range.second, &A[L], &A[R]);
		range.first = A[L]+1, range.second = A[R]-1;
		L++, R--;
	}
	for(lli i = 1;i < n;i++) ans = max(ans, A[i]-A[i-1]);
}

void sub2(lli n)
{
	pair<lli, lli> range;
	MinMax(0, inf, &range.first, &range.second);
	lli sz = (range.second-range.first+1)/(n+1);
	lli prev = range.first;
	pair<lli, lli> cur = {range.first, range.first+sz-1};
	while(cur.first <= range.second)
	{
		pair<lli, lli> res;
		//cout << cur.first << " " << cur.second << "\n";
		MinMax(cur.first, cur.second, &res.first, &res.second);
		if(res.first != -1)
		{
			ans = max(ans, res.first-prev);
			prev = res.second;
		}
		cur.first += sz, cur.second += sz;
	}
}

lli findGap(int t, int n)
{
	if(t == 1) sub1(n);
	else sub2(n);
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...