Cod sursa(job #1852092)

Utilizator mihneacazCazacu Mihnea mihneacaz Data 20 ianuarie 2017 15:53:36
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int v[5005],p[5005],t[5005],poz[5005];
int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    int n,i,nr,m,st,dr,med,k,lmin,val,j;
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&v[i]);
        t[i]=v[i];
    }
    sort(t+1,t+n+1);
    nr=0;
    v[n+1]=2000000001;
    for(i=1; i<=n; i++)
        if(t[i]!=t[i+1])
            p[++nr]=t[i];
    m=0;
    for(i=1; i<=n; i++)
    {
        st=1;
        dr=nr;
        while(st<=dr)
        {
            med=(st+dr)/2;
            if(p[med]==v[i])
            {
                v[i]=med;
                break;
            }
            else
            {
                if(p[med]<v[i])
                    st=med+1;
                else
                    dr=med-1;
            }
        }
        if(v[i]==1)
            poz[++m]=i;
    }
    k=nr;
    lmin=n+1;
    for(i=1; i<=m; i++)
    {
        st=poz[i];
        val=2;
        for(j=st; j<=n; j++)
        {
            if(v[j]==val)
                val++;
            if(val==k+1)
            {
                if(j-st+1<lmin)
                    lmin=j-st+1;
                break;
            }
        }
    }
    if(lmin<n+1)
        printf("%d\n",lmin);
    else
        printf("-1\n");

    return 0;
}