Submission #1152304

#TimeUsernameProblemLanguageResultExecution timeMemory
1152304zhasynGap (APIO16_gap)C++20
100 / 100
36 ms5152 KiB
#include "gap.h"
#include <bits/stdc++.h>
#define pb push_back
#define pf push_front
using namespace std;
#define F first
#define S second
typedef long long ll;
#define pii pair <int, int>
#define pll pair <ll, ll>
typedef long double ld;
const ll N = 1e5 + 100, M = 4096 + 10, len = 21, inf = 1e18;
const ll mod = 1e9 + 7;
// void MinMax(ll l, ll r, ll &mn, ll &mx){
// 	cout << l <<" " << r << endl;
// 	cin >> mn >> mx;
// }
vector <ll> vec;
int nx;
void calc(ll l, ll r){
	ll mn, mx;
	MinMax(l, r, &mn, &mx);
	if(mn == -1) return;
	if(mn == mx){
		vec.pb(mn);
		return;
	}
	vec.pb(mn);
	vec.pb(mx);
	l = mn + 1;
	r = mx - 1;
	if((ll)vec.size() == nx) return;
	calc(l, r);
}
long long findGap(int t, int n)
{
	nx = n;
	ll ans = 1;
	if(t == 1){
		calc(0, 1e18);
		sort(vec.begin(), vec.end());
		for(ll i = 0; i < (ll)vec.size() - 1; i++){
			ans = max(ans, vec[i + 1] - vec[i]);
		}
	} else{
		ll mn, mx, gr = (n - 1) / 2, prev, k, l = 0, r = 1e18;
		MinMax(l, r, &mn, &mx);
		if(n == 2) return mx - mn;
		prev= mn;
		l = mn + 1;
		r = mx - 1;
		k = (r - l + 1) / gr;
		for(ll cur = l; cur <= r; cur = cur + k){
			ll mnx, mxx;
			MinMax(cur, min(cur + k - 1, r), &mnx, &mxx);
			if(mnx != -1){
				ans = max(ans, mnx - prev);
				ans = max(ans, mxx - mnx);
				prev = mxx;
			}
		}
		ans = max(ans, mx -prev);
	}
	return ans;
}



// int main(){
//   	ios::sync_with_stdio(false);
//   	cin.tie(NULL);
//   	ll t, n;
//   	cin >> t >> n;
//   	findGap(t, n);
//   return 0;
// }

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