Cod sursa(job #1334157)

Utilizator akaprosAna Kapros akapros Data 3 februarie 2015 22:52:14
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<algorithm>
#define Nmax 5005
#define Inf 1000000000
using namespace std;
int n,i,j,p,q,nr;
int v[Nmax],w[Nmax],x[Nmax],a[Nmax];
int poz[Nmax];
int sol;
int cb(int val)
{
    int st=1,dr=x[0],m;
    while (st<=dr)
    {
        m=(st+dr)/2;
        if (x[m]==val) return m;
        if (x[m]<val) st=m+1;
        else dr=m-1;
    }
    return 0;
}
int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    scanf("%d",&n); w[0]=-1;
    sol=Inf; a[0]=Inf;
    for (i=1;i<=n;i++)
    scanf("%d",&v[i]),w[i]=v[i],a[i]=Inf;
    sort(w+1,w+n+1);
    for (i=1;i<=n;i++)
    if (w[i]!=w[i-1])
    x[++x[0]]=w[i];
    for (i=1;i<=n;i++)
    {
        p=cb(v[i]);
        if (p==1) a[i]=1;
        else if (a[poz[p-1]]!=Inf)
        a[i]=a[poz[p-1]]+i-poz[p-1];
        if (v[i]==x[x[0]])
        sol=min(sol,a[i]);
        poz[p]=i;
    }
    if (sol==Inf) printf("%d",-1);
    else printf("%d",sol);
    return 0;
}