Cod sursa(job #1752745)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 5 septembrie 2016 00:32:28
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
# include <fstream>
# include <algorithm>
# define DIM 5010
# define INF 1000000000
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
int v[DIM],sor[DIM],us[DIM],l[DIM],n,k,i,j,st,dr,mij,maxim,minim;
int main () {
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>v[i];
        sor[i]=v[i];
        maxim=max(maxim,v[i]);
    }
    sort(sor+1,sor+n+1);
    us[++k]=sor[1];
    for(i=2;i<=n;i++)
        if(sor[i]!=sor[i-1])
            us[++k]=sor[i];
    for(i=1;i<=n;i++){
        st=1;
        dr=k;
        while(st<=dr){
            mij=(st+dr)/2;
            if(us[mij]<v[i])
                st=mij+1;
            else
                dr=mij-1;
        }
        v[i]=st;
    }
    for(i=1;i<=n;i++){
        if(v[i]==1){
            l[i]=i;
            continue;
        }
        for(j=1;j<i;j++)
            if(v[j]+1==v[i])
                l[i]=max(l[i],l[j]);
        if(l[i]==0)
            l[i]=-INF;
    }
    minim=INF;
    for(i=1;i<=n;i++)
        if(v[i]==k&&i-l[i]+1<minim)
            minim=i-l[i]+1;
    if(minim==INF)
        fout<<-1;
    else
        fout<<minim;
    fout<<"\n";
    return 0;
}