Submission #396244

#TimeUsernameProblemLanguageResultExecution timeMemory
396244giorgikobGap (APIO16_gap)C++14
100 / 100
71 ms1180 KiB
#include<bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define pb push_back
using namespace std;

//#include "game.h"

#include "gap.h"

ll answer = 0;
long long findGap(int T, int N)
{
    ll l = -1, r = 1e18; r++;
    ll cnt = 0;
    int calls = 0;
    ll len = -1;
    if(T == 1){
        while(true){
            ll new_l,new_r;
            if(len != -1){
                if((r-l) < len/N) break;
            }
            cnt++;
            if(answer >= r-l) break;
            if(cnt > (N+1)/2){
                if(l != r){
                    answer = max(answer,r-l);
                }
                break;
            }
            if(l+1 > r-1){
                if(l == r) break;
                answer = max(answer,r-l);
                break;
            }
            MinMax(l+1,r-1,&new_l,&new_r);
            calls++;
            if(new_l == -1){
                answer = max(answer,r-l);
                break;
            } else {
                if(cnt > 1)answer = max(answer, max(new_l-l,r-new_r)); else len = new_r-new_l;
                l = new_l;
                r = new_r;
            }
        }
    } else {
        ll last = -1;
        MinMax(0,1e18,&l,&r);
        ll k = (r-l+1)/N;
        if((r-l+1)%N) k++;
        if(r-l+1 == N){
            return N;
        }
        assert(k != 1);
        last = l;
        for(ll i = l; i <= r; i += k){
            ll a,b;
            ll askl = i;
            if(i == l) askl = l+1;
            MinMax(askl,min(i+k-1,r),&a,&b);
            if(a == -1){
                continue;
            }
            answer = max(answer,b-a);
            if(last != -1){
                answer = max(answer,a-last);
            }
            last = b;
        }
    }

	return answer;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...