Cod sursa(job #1416720)

Utilizator Darius15Darius Pop Darius15 Data 8 aprilie 2015 20:07:11
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
int l,n,i,a[5005],y,MAX,b[5005],u[5005],v[5005],MIN=5005;
int caut(int val)
{
    int st,dr,m;
    st=1,dr=l;
    while(st<=dr)
    {
        m=(st+dr)/2;
        if (val==b[m])
            return m;
        else if (val>b[m]) st=m+1;
        else dr=m-1;
    }
}
int dfs(int i)
{
    while(a[i]!=1 && (i>0))
        i=v[i];
    return i;
}
int main()
{
    f>>n;
    for (i=1;i<=n;i++)
        f>>a[i],b[i]=a[i];
    sort(b+1,b+n+1);
    for (i=1;i<=n;i++)
        if (b[i]!=b[i-1])
        b[++l]=b[i];
    for (i=1;i<=n;i++)
        a[i]=caut(a[i]);
    for (i=1;i<=n;i++)
    {
        if (u[a[i]-1]!=0) v[i]=u[a[i]-1];
        u[a[i]]=i;
    }
    for (i=1;i<=n;i++)
    {
        if (a[i]==b[l])
        {
            y=dfs(i);
            if (y!=0)
                MIN=min(i-y+1,MIN);
        }
    }
    g<<MIN<<'\n';
    return 0;
}