Cod sursa(job #1998775)

Utilizator victoreVictor Popa victore Data 9 iulie 2017 00:46:31
Problema Secv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<cstdio>
#include<map>

using namespace std;

const int nmax=5005;

int v[nmax];
map<int,int> m;
struct al
{
    int start,x;
}d[nmax];

int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    int n,i,j,cnt=0;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
    {
        scanf("%d",&v[i]);
        if(m.find(v[i])==m.end())
            m[v[i]]=++cnt;
    }
    int lngmax=5005;
    for(i=1;i<=n;++i)
    {
        d[i].start=i;
        d[i].x=1;
        for(j=i-1;j;--j)
        {
            if(v[j]<v[i]&&(d[i].x<d[j].x+1||(d[i].x==d[j].x+1&&d[i].start<d[j].start)))
                d[i].x=d[j].x+1,d[i].start=d[j].start;
        }
        if(d[i].x==cnt&&lngmax>i-d[i].start+1)
            lngmax=i-d[i].start+1;
    }
    if(lngmax==5005)
        printf("-1");
    else
        printf("%d",lngmax);
}