Cod sursa(job #189684)

Utilizator firewizardLucian Dobre firewizard Data 17 mai 2008 00:26:48
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <stdio.h>   
#define FOR(i,s,d) for(i=(s);i<=(d);++i)    
long a[50005],b[50005],t[50005],p[50005];   
long i,j,n,q,max,max2,x,maxelem,ok;   
int main()   
{   
    freopen ("secv.in","r",stdin);   
    freopen ("secv.out","w",stdout);   
    scanf("%ld",&n);
    
    scanf("%ld",&a[1]);p[1]=a[1];q=1;
    
    FOR (i,2,n){   
        scanf("%ld",&a[i]);
        FOR (j,1,q){
            ok=1;
            if(p[j]==a[i]) ok=0;
            if (ok==1)p[++q]=a[i];
            }
        }   
    maxelem=q;q=0; 
    FOR (i,1,n){b[i]=1;p[i]=0;}
       
    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]!=maxelem){         
    /*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;   
}