Cod sursa(job #265071)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 23 februarie 2009 11:01:55
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<stdio.h>
#define DIM 100001
int n,a[DIM],max,ind,lung[DIM],prec[DIM],b[DIM];
void read ()
{
    int i;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",&a[i]);
}
void solve ()
{
    int i,j;
    for(i=1;i<=n;++i)
    {
        max=ind=0;
        for(j=1;j<i;++j)
            if(a[i]>a[j] && lung[j]>max)
            {
                max=lung[j];
                ind=j;
            }
        lung[i]=max+1;
        prec[i]=ind;
    }
    max=ind=0;
    for(i=1;i<=n;++i)
        if(lung[i]>max)
        {
            ind=i;
            max=lung[i];
        }
}
void show ()
{
    int max2=max,i;
    printf("%d\n",max);
    b[max--]=a[ind];
    while(prec[ind])
    {
        b[max--]=a[prec[ind]];
        ind=prec[ind];
    }
    for(i=1;i<=max2;++i)
    printf("%d ",b[i]);
    
}
int main ()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    read ();
    solve ();
    show ();
    return 0;
}