Submission #1293479

#TimeUsernameProblemLanguageResultExecution timeMemory
1293479kian2009Gap (APIO16_gap)C++20
100 / 100
48 ms3360 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;

typedef long long ll;

const int MAXN = 1e5 + 10;
const ll N = 1e18;

ll a[MAXN];
vector<ll> num;

ll solve(int n) {
	ll l = 0, r = N, mi, ma;
	for (int i = 0; i < (n + 1) / 2; i++) {
		MinMax(l, r, &mi, &ma);
		a[i] = mi;
		a[n - 1 - i] = ma;
		l = mi + 1;
		r = ma - 1;
	}
	ll res = 0;
	for (int i = 1; i < n; i++)
		res = max(res, a[i] - a[i - 1]);
	return res;
}

ll findGap(int t, int n) {
	if (t == 1)
		return solve(n);
	ll res = 0, b, e, mi, ma;
	MinMax(0, N, &b, &e);
	num.push_back(b);
	if (e - b - 1 < n) {
		for (int i = b + 1; i < e; i++) {
			MinMax(i, i, &mi, &ma);
			if (mi != -1)
				num.push_back(i);	
		}
		num.push_back(e);
		for (int i = 1; i < n; i++)
			res = max(res, num[i] - num[i - 1]);
		return res;
	}
	ll cnt = b + 1, x = (e - b - 1) / n, y = (e - b - 1) % n;
	for (int i = 0; i < n; i++) {
		ll r = cnt + (i < y? x + 1: x);
		MinMax(cnt, r - 1, &mi, &ma);
		if (mi != -1) {
			num.push_back(mi);
			num.push_back(ma);	
		}
		cnt = r;
	}
	num.push_back(e);
	for (int i = 1; i < num.size(); i++)
		res = max(res, num[i] - num[i - 1]);
	return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...