#include "gap.h"
#include <bits/stdc++.h>
#define ll long long
std::vector<ll> a;
long long findGap(int T, int N)
{
if(T==1){
ll mn,mx,ans = 0;
MinMax(0,1e18,&mn,&mx);
std::vector<ll> left={mn};
std::vector<ll> right={mx};
ll l=1,r=N-2;
while(l<=r){
MinMax(mn+1,mx-1,&mn,&mx);
// std::cout << v1+1 << ' ' << v2-1 << '\n';
left.push_back(mn);
right.push_back(mx);
l+=1;r-=1;
}
ll best=0;
for(int i=0;i<left.size()-1;i++){
ll diff = left[i+1]-left[i];
best=std::max(diff,best);
}
for(int i=0;i<right.size()-1;i++){
ll diff = right[i]-right[i+1];
best=std::max(diff,best);
}
best=std::max(best,right.back()-left.back());
return best;
}
if(N>=10){
ll mn,mx,ans = 0;
MinMax(0,1e18,&mn,&mx);
ll meandis = ((mx-mn+N-2)/N-1);
a.push_back(mn);
a.push_back(mx);
for(ll x=mn+1;x<=mx;x+=meandis+1){
ll a1,a2;
MinMax(x,x+meandis,&a1,&a2);
a.push_back(a1);a.push_back(a2);
}
std::sort(a.begin(),a.end());
for(ll i=0;i<a.size()-1;i++)ans=std::max(ans,a[i+1]-a[i]);
return ans;
}
else{
ll v1=0-1,v2=1e18+1,high=0,low=0;
MinMax(v1+1,v2-1,&v1,&v2);
high=v2;low=v1;
ll dis = v2-v1;
ll meandis = (dis/N) + 1;
ll test1 =v1+1,test2 = v1+meandis;
ll last=v1;
ll best = 0;
while(test1<high){
MinMax(test1,test2,&v1,&v2);
if(v1!=-1)
best=std::max((ll)best,v1-last);
if(v2!=-1)
last=v2;
//best=std::max(best,v2-v1);// not really needed
test1+=meandis;
test2+=meandis;
}
best=std::max(best,high-v2);
return best;
}
return 0;
}