Submission #161643

#TimeUsernameProblemLanguageResultExecution timeMemory
161643kostia244Gap (APIO16_gap)C++14
100 / 100
82 ms3312 KiB
#include "gap.h"
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
using ll = long long;
long long naive(int N)
{
	long long l = 0, r = 1e18, lp = 0, rp = N-1, x=0, y=0, a[100100];
	for(int i = 0; lp<=rp; i++) {
		MinMax(l, r, &x, &y);
		a[lp] = x, a[rp] = y;
		l=x+1, r=y-1;
		lp++,rp--;
	}
	ll ans = 0;
	for(int i = 1; i < N; i++) {
		ans = max(ans, a[i]-a[i-1]);
	}
	return ans;
}
long long findGap(int T, int N) {
	if(T==1) {
		return naive(N);
	}
	ll l = 0, r = 1e18, mn, mx, tl, tr, inc = 0;
	MinMax(l, r, &mn, &mx);
	ll step = (mx - mn + N - 1) / N;
	l = mn, r = mn+step;
	ll ans = step;
	ll omx = mx;
	vector<ll> x;
	x.pb(mn);
	mn++, mx--;
	while (true) {
		MinMax(l, r, &tl, &tr);
		if (tl != -1) {
			x.pb(tl);
			x.pb(tr);
			inc++;
		}
		if(tl!=-1)
		for (int i = max(1, (int)x.size()-3); i < x.size(); i++) {
			if(ans < x[i] - x[i - 1]) {
				ans = x[i] - x[i - 1];
			}
		}
		if(mx-tr<ans) break;
		if (r == mx)
			break;
		l = r+1;
		r = l+ans+1;
		r = min(r, mx);
	}
	x.pb(omx);
	for (int i = 1; i < x.size(); i++) {
		if(ans < x[i] - x[i - 1]) {
			ans = x[i] - x[i - 1];
		}
	}
	return ans;
}

Compilation message (stderr)

gap.cpp: In function 'long long int findGap(int, int)':
gap.cpp:42:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = max(1, (int)x.size()-3); i < x.size(); i++) {
                                         ~~^~~~~~~~~~
gap.cpp:55:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < x.size(); i++) {
                  ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...