Cod sursa(job #1847573)

Utilizator andreinichitaTirziu Nichita andreinichita Data 14 ianuarie 2017 19:02:04
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int v[5005],s[5005],x[5005];
int bs(int st,int dr,int val)
{
    int med;
    while(st<=dr)
    {
        med=(st+dr)/2;
        if(val==x[med])
            return med;
        else
            if(val<x[med])
            dr=med;
        else
            st=med;
    }
    return med;
}
int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    int n,i,j,lmin=5005,k;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&v[i]);
        s[i]=v[i];
    }
    sort(s+1,s+n+1);
    i=j=1;
    while(i<=n)
    {
        x[j]=s[i];
        j++;
        while(s[i]==s[i+1]&&i<=n)
            i++;
        i++;
    }
    for(i=1;i<=n;i++)
        v[i]=bs(1,j,v[i]);
    j--;
    for(i=1;i<=n;i++)
        if(v[i]==1)
        {
            int poz=2;
            for(k=i+1;k<=n&&poz<=j;k++)
                if(v[k]==poz)
                poz++;
            if(poz>j)
                if(k-i<lmin)
                lmin=k-i;
        }
    if(lmin==5005)
        printf("-1");
    else
        printf("%d",lmin);
    return 0;
}