Cod sursa(job #1327090)

Utilizator ade_tomiEnache Adelina ade_tomi Data 26 ianuarie 2015 13:02:15
Problema Secv Scor 100
Compilator cpp Status done
Runda simulareoji2015 Marime 1.2 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
int d[5005],i,nr,j,sol,ok,n,last_v;
struct str
{
    int x,poz;
};
str v[5005];
bool sortare1(str a , str b)
{
    return a.x<b.x;

}
bool sortare2(str a, str b)
{
    return a.poz<b.poz;
}
int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&v[i].x);
        v[i].poz=i;
    }
    v[0].x=-1;
    sort(v+1,v+1+n,sortare1);
    last_v=-1;
    for(i=1;i<=n;i++)
    {

        if(v[i].x!=last_v)
        {
            nr++;
        }
        last_v=v[i].x;
        v[i].x=nr;
    }

    sort(v+1,v+1+n,sortare2);
    //for(i=1;i<=n;i++)
      //  printf("%d ",v[i].x);
    sol=n+1;
    for(i=1;i<=n;i++)
    {
        ok=0;
        if(v[i].x!=1)
        {
            for(j=i-1;j>=1;j--)
            {

                if(v[j].x==v[i].x-1&&d[j]!=0)
                {
                    ok=d[j];
                    break;
                }
            }
            d[i]=ok;
        }
        else d[i]=i;
        if(v[i].x==nr&&i-d[i]+1<sol&&d[i]!=0)
                sol=i-d[i]+1;

    }
    if(sol==n+1)
        printf("-1");
    else printf("%d",sol);
    return 0;
}