Submission #42687

#TimeUsernameProblemLanguageResultExecution timeMemory
42687MatheusLealVGap (APIO16_gap)C++14
100 / 100
82 ms3488 KiB
#include <bits/stdc++.h>
#include "gap.h"
#define N 100005
#define inf 1000000000000000000LL
using namespace std;
typedef long long ll;
 
ll n, v[N], ans[N];
 
vector<ll> val;

ll qtd = 0;
 
void solve(ll ini, ll fimi, ll best)
{
	while(true)
	{
		qtd ++;

		if(ini > fimi || qtd > N) break;

		ll a, b, fim = ini + best;

	  	MinMax(ini, fim, &a, &b);

	  	if(a != -1 && b != -1) val.push_back(a), val.push_back(b);

	  	ini = ini + best + 1;
	}
}
 
ll findGap(int T, int N_)
{
	ll best = 0, n = N_;
 
	if(T == 1)
	{ 
		ll esq = 0, dir = inf;
 
		for(int i = 1, st = 1, en = n; i <= (n + 1)/2; i++, st ++, en --)
		{
			ll a, b;
 
			MinMax(esq, dir, &a, &b);
 
			esq = a + 1, dir = b - 1;
 
			if(a != -1 && b != -1) ans[st] = a, ans[en] = b;
		}
 
		for(int i = 2; i <= n; i++) best = max(best, ans[i] - ans[i - 1]);
 
		return best;
	}
 
	else
	{
		ll st, en, dx;

		MinMax(0, inf, &st, &en);

		if((en - st)%(n - 1) > 0) dx = 1 + (en - st)/(n - 1);

		else dx = (en - st)/(n - 1);

		solve(st, en, dx);

		sort(val.begin(), val.end());

		dx = 0;

		for(int i = 1; i < val.size(); i++) dx = max(dx, val[i] - val[i - 1]);

		return dx;
	}
 
}

Compilation message (stderr)

gap.cpp: In function 'll findGap(int, int)':
gap.cpp:72:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 1; i < val.size(); i++) dx = max(dx, val[i] - val[i - 1]);
                    ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...