Cod sursa(job #383745)

Utilizator mottyMatei-Dan Epure motty Data 17 ianuarie 2010 22:13:39
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>

const int N=100008;

int n,v[N],a[N],pred[N],rez,r[N],pz;

void read()
{
	scanf("%d",&n);
	for( int i=1 ; i<=n ; ++i )
		scanf("%d",&a[i]);
}

void solve()
{
	int max,pm;
	pred[1]=-1;
	v[1]=1;
	for( int i=1 ; i<=n ; ++i )
	{
		max=0;
		for( int j=1 ; j<i ; ++j )
			if( j<i && a[j]<a[i] )
				if( v[j]>max )
				{
					max=v[j];
					pm=j;
				}
		if(max!=0)
		{
			v[i]=max+1;
			pred[i]=pm;
		}
		else
		{
			v[i]=1;
			pred[i]=-1;
		}
		if(v[i]>v[rez])
			rez=i;
	}
}

void afis()
{
	printf("%d\n",v[rez]);
	while( rez!=-1 )
	{
		r[++pz]=rez;
		rez=pred[rez];
	}
	while(pz!=0)
	{
		printf("%d ",a[r[pz]]);
		pz--;
	}
}

int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	read();
	solve();
	afis();
	return 0;
}