Cod sursa(job #189110)

Utilizator firewizardLucian Dobre firewizard Data 12 mai 2008 09:42:15
Problema Secv Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#define FOR(i,s,d) for(i=(s);i<=(d);++i)
char v[20000005];
long a[50005],b[50005],t[50005],p[50005];
long i,j,n,q,max,max2,x;
int main()
{
    freopen ("secv.in","r",stdin);
    freopen ("secv.out","w",stdout);
    scanf("%ld",&n);
    FOR (i,1,n){
        scanf("%ld",&x);
        if(v[x]==0)a[++q]=x;
        }
    n=q;q=0;
    FOR (i,1,n)b[i]=1;
    for(i=n-1;i>=1;--i){
        for (j=i+1;j<=n;++j){
            if (a[i]<a[j]&&b[j]+1>b[i]){
                b[i]=b[j]+1;t[i]=j;
                }
            }
            if (p[0]<b[i]){p[0]=b[i];q=0;p[++q]=i;}
            else if(p[0]==b[i]){p[++q]=i;}
        }
     if(p[0]==n){      
    /*printf("%ld\n",p[0]);
    FOR(i,1,n)printf("%ld ",a[i]);
    printf("\n");    
    FOR(i,1,n)printf("%ld ",b[i]);
    printf("\n");
    FOR(i,1,n)printf("%ld ",t[i]);    
    printf("\n\n");
    printf("%ld\n\n",p[0]);*/
    max=50001;
    FOR (j,1,q){
        i=p[j];
        while(t[i]!=0){/*printf("%ld ",a[i]);*/i=t[i];}
        /*printf("\n%ld %ld\n%ld\n\n",p[j],i,i-p[j]+1);*/
        if(max>i-p[j]+1)max=i-p[j]+1;
    }
    printf("%ld\n",max);}
    else printf("-1\n");
    return 0;
}