Submission #1304719

#TimeUsernameProblemLanguageResultExecution timeMemory
1304719kindepGap (APIO16_gap)C++20
100 / 100
48 ms3236 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;
constexpr long long INF=1e18;
vector<long long> vec;

/*
void MinMax(long long s, long long t, long long &mn, long long &mx){
    auto it=lower_bound(vec.begin(), vec.end(), s);
    if ((it==vec.end())||(*it>t)){
        mn=mx=-1; return;
    }
    auto it2=upper_bound(vec.begin(), vec.end(), t);
    if (it2!=vec.begin())
        it2--;
    mn=*it, mx=*it2;
    return;
}
    */

void podzad1(int N, long long &wyn){
    long long t[N+1], mn=INF, mx=0;
    MinMax(0, INF, &mn, &mx);
    t[1]=mn, t[N]=mx;
    for (int i=2; i<=(N+1)/2; i++){
        mn=INF, mx=0;
        MinMax(t[i-1]+1, t[N-(i-2)]-1, &mn, &mx);
        t[i]=mn, t[N-(i-1)]=mx;
    }
    for (int i=1; i<N; i++){
        wyn=max(wyn, t[i+1]-t[i]);
    }
    return;
}

void podzad2(int N, long long &wyn){
    long long n=N;
    vector<long long> war;
    long long pier=INF, ost=0, prz, pom;
    MinMax(0, INF, &pier, &ost);
    war.push_back(pier);
    if (n<=2){
        wyn=ost-pier;
        return;
    }
    prz=(ost-pier)/(n-1);
    for (long long i=pier+1LL; i+prz<=ost; i+=prz+1LL){
        long long a=INF, b=0;
        MinMax(i, i+prz, &a, &b);
        pom=i+prz+1;
        if ((a!=(long long)(-1))&&(a!=b))
            war.push_back(a), war.push_back(b);
        else if (a!=(long long)(-1))
            war.push_back((a));
    }
    long long a=INF;
    MinMax(pom, max(pom, ost), &a, &ost);
    war.push_back(a);
    war.push_back(ost);
    for (int i=1; i<war.size(); i++){
        wyn=max(wyn, war[i]-war[i-1]);
    }
    return;
}


long long findGap(int T, int N){
    long long wyn=0;
    if (T==1)
        podzad1(N, wyn);
    else
        podzad2(N, wyn);
    return wyn;
}


/*
int main(){
    int T, N; long long a, pom=0; cin >> T >> N;
    for (int i=0; i<N; i++){
        cin >> a, vec.push_back(a);
        if (i)
            pom=max(pom, vec[i]-vec[i-1]);
    }
    cout << findGap(T, N);
    cout << pom;
}
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...