Cod sursa(job #1998814)

Utilizator victoreVictor Popa victore Data 9 iulie 2017 12:24:13
Problema Secv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<cstdio>

using namespace std;

const int mod1=666013;
const int mod2=637729;
const int nmax=5005;

int v[nmax];
bool key1[666020],key2[637735];

struct al
{
    int x,start;
}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(key1[v[i]%mod1]==0||key2[v[i]%mod2]==0)
            key1[v[i]%mod1]=key2[v[i]%mod2]=1,++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);
}