Cod sursa(job #209728)

Utilizator DraStiKDragos Oprica DraStiK Data 24 septembrie 2008 14:06:01
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
# include <stdio.h>
int n,max;
int a[100005],b[100005],lung[100005],prec[100005];
void read ()
{
     int i;
     scanf ("%d",&n);
     for (i=1; i<=n; ++i)
	 scanf ("%d",&a[i]);
}
void solve ()
{
     int i,j,best,ind;
     for (i=1; i<=n; ++i)
     {
	 best=0;
	 ind=0;
	 for (j=1; j<i; ++j)
	     if (a[i]>a[j] && lung[j]>best)
	     {
		best=lung[j];
		ind=j;
	     }
	 lung[i]=best+1;
	 prec[i]=ind;
     }
     for (i=1; i<=n; ++i)
	 if (lung[i]>max)
	 {
	    max=lung[i];
	    ind=i;
	 }
    printf ("%d\n",max);
    best=max;
    b[max--]=a[ind];
    while(prec[ind])
    {
	b[max--]=a[prec[ind]];
	ind=prec[ind];
    }
    for (i=1; i<=best; ++i)
	printf ("%d ",b[i]);
}
int main ()
{
	freopen ("scmax.in","r",stdin);
	freopen ("scmax.out","w",stdout);
	read ();
	solve ();
    return 0;
}