Submission #744961

#TimeUsernameProblemLanguageResultExecution timeMemory
744961amirhoseinfar1385Gap (APIO16_gap)C++17
100 / 100
47 ms1868 KiB
#include<bits/stdc++.h>
#include "gap.h"
using namespace std;

long long findGap(int T, int N)
{
	if(T==1||N<=8){
		vector<long long>all(N);
		long long mn=-1,mx=((long long)1e18+5),fmn=0,fmx=0;
		//cout<<mx<<"\n";
		int last=N-1,first=0;
		while(last>=first){
			MinMax(mn+1,mx-1,&fmn,&fmx);
			//cout<<first<<" "<<last<<" "<<mn+1<<" "<<mx-1<<" "<<fmn<<" "<<fmx<<'\n';
			mn=fmn;
			mx=fmx;
			all[last]=mx;
			all[first]=mn;
			last--;
			first++;
		}
		long long res=0;
		for(int i=1;i<N;i++){
		//	cout<<all[i]<<" "<<all[i-1]<<'\n';
			res=max(res,all[i]-all[i-1]);
		}
		return res;
	}
	else{
		long long res=1;
		long long mn=-1,mx=((long long)1e18+5),fmn=0,fmx=0;
		MinMax(mn+1,mx-1,&fmn,&fmx);
		mn=fmn;
		mx=fmx;
		res=(mx-mn)/N;
		while(mn+res-1<mx){
			//cout<<mn<<" asda "<<res<<endl;
			MinMax(mn+1,mn+res,&fmn,&fmx);
			//cout<<fmn<<" edasdb "<<fmx<<endl;
			if(fmn==-1){
				break;
			}
			mn=fmx;
		}
		//cout<<mn<<" "<<mx<<endl;
		while(mn+res-1<mx){
			//cout<<mn<<" asd "<<res<<endl;
			MinMax(mn+res,mn+res+res,&fmn,&fmx);
			if(fmn==-1){
				res*=2;
				res++;
				continue;
			}
			res=max(res,fmn-mn);
			mn=fmx;
			while(mn+res-1<mx){
				//cout<<mn<<" asda "<<res<<endl;
				MinMax(mn+1,mn+res,&fmn,&fmx);
				//cout<<fmn<<" edasdb "<<fmx<<endl;
				if(fmn==-1){
					break;
				}
				mn=fmx;
			}
			//cout<<mn<<" asdb "<<res<<endl;
		}
		//cout<<res<<endl;
		return res;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...