제출 #1113716

#제출 시각아이디문제언어결과실행 시간메모리
1113716simona1230Gap (APIO16_gap)C++17
0 / 100
1072 ms524288 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;


/*int nn;
long long a[200001];

void MinMax(long long l,long long r,long long *mn,long long *mx)
{
    *mn=-1;
    for(int i=1;i<=nn;i++)
        if(a[i]>=l)
    {
        *mn=a[i];
        break;
    }
    *mx=-1;
    for(int i=nn;i>=1;i--)
        if(a[i]<=r)
    {
        *mx=a[i];
        break;
    }
}*/

long long n;
long long solve(long long l,long long r)
{
    if(l==-1||l>r)return 0;
    //cout<<l<<" "<<r<<" "<<ll<<" "<<rr<<endl;

    long long ans=0;

    long long len=r-l+1;
    long long b=len/n;
    if(len%n)b++;

    long long last=-1;

    for(long long i=l;i<=r;i+=b)
    {
        long long j=min(i+b-1,r);
        long long mn=0,mx=0;
        //cout<<i<<" "<<j<<endl;
        MinMax(i,j,&mn,&mx);

        if(mn==-1)continue;

        if(last!=-1)ans=max(ans,mn-last);
        last=mx;

        ans=max(ans,solve(mn,mx));
    }
    return ans;
}

long long findGap(int t,int N)
{
    n=N;
    return solve(1,1e18);
}


/*int main()
{
    long long d=0;
    int x;
    cin>>x>>nn;
    for(int i=1;i<=nn;i++)
    {
        cin>>a[i];
        if(i!=1)d=max(d,a[i]-a[i-1]);
    }

    long long answer=findGap(1,nn);
    cout<<d<<" "<<answer<<endl;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...