Cod sursa(job #347065)

Utilizator freak93Adrian Budau freak93 Data 10 septembrie 2009 20:17:30
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<fstream>
#include<algorithm>

using namespace std;

const char iname[]="secv.in";
const char oname[]="secv.out";
const int maxn=5007;

ifstream f(iname);
ofstream g(oname);

int a[maxn],s[maxn],p[maxn],l[maxn],i,j,n,k,step,mint;

int main()
{
    f>>n;
    for(i=1;i<=n;++i)
        f>>a[i],p[i]=a[i];
    sort(p+1,p+n+1);
    s[++k]=p[1];
    for(i=2;i<=n;++i)
    {
        if(p[i]!=p[i-1])
            s[++k]=p[i];
        p[i-1]=0;
    }
    p[n]=0;

    mint=0x3f3f3f3f;

    for(i=1;i<=n;++i)
    {
        for(step=1;step<=k;step<<=1);
        for(j=0;step;step>>=1)
            if(j+step<=k&&s[j+step]<=a[i])
                j+=step;
        if(j==1)
            p[1]=i,l[1]=i-1;
        else
            if(p[j-1])
                p[j]=i,l[j]=l[j-1];
        if(p[j]&&j==k&&p[j]-l[j]<mint)
            mint=p[j]-l[j];
    }

    if(n==0)
        mint=0;
    if(mint==0x3f3f3f3f)
        mint=-1;

    g<<mint<<"\n";

    f.close();
    g.close();

    return 0;
}