Cod sursa(job #189102)

Utilizator firewizardLucian Dobre firewizard Data 12 mai 2008 09:25:56
Problema Secv Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 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;
int main()
{
    freopen ("secv.in","r",stdin);
    freopen ("secv.out","w",stdout);
    scanf("%ld",&n);
    FOR (i,1,n) scanf("%ld",&a[i]);
    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;}
        }
            
    /*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);
    return 0;
}