Submission #1241670

#TimeUsernameProblemLanguageResultExecution timeMemory
1241670thelegendary08Gap (APIO16_gap)C++17
100 / 100
44 ms1864 KiB
#include "gap.h"
#include<bits/stdc++.h>
using namespace std;
long long findGap(int T, int N)
{
	if(T == 1){
		long long L = -1; long long R = 1000000000000000005; 
		long long mn, mx;
		vector<long long>v(N);
		int l = 0; int r = N-1;
		while(l <= r){
			// cout<<L+1<<' '<<R-1<<'\n';
			MinMax(L+1, R-1, &mn, &mx);
			L = mn; R = mx;
			// cout<<L<<' '<<R<<'\n';
			if(L == R){
				v[l] = L;
			}
			else{
				v[l] = mn; v[r] = mx;
			}
			l++; r--;
		}
		// for(auto u : v)cout<<u<<' ';
		// cout<<'\n';
		long long ans = 0;
		for(int i = 0; i<N-1; i++){
			if(ans < v[i+1] - v[i])ans = v[i+1] - v[i];
		}
		return ans;
	}
	else{
		long long mn, mx;
		long long L = -1; long long R = 1000000000000000005; 
		MinMax(L+1, R-1, &mn, &mx);
		long long lb = (mx - mn + N - 2) / (N-1);
		long long pv = -1;
		long long r1, r2;
		long long ans = lb; 
		for(long long i = mn; i <= mx; i+=lb + 1){
			MinMax(i, i + lb, &r1, &r2);
			if(r1 != -1){
				if(pv != -1){
					// cout<<pv<<'\n';
					ans = max(ans, r1 - pv);
				}
				pv = r2;
			}
		}
		return ans;
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...