Cod sursa(job #701560)

Utilizator osiceanu_paulOsiceanu paul osiceanu_paul Data 1 martie 2012 16:31:19
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
using namespace std;

int n,x[100001],lung[100001],pred[100001];

int pozmax()
{
	int i,pm=1;
	for(i=2 ; i<=n ; i++)
		if(lung[i]>lung[pm])
			pm = i;
	return pm;
}

void subsir(int p)
{
	if(pred[p]!=0) subsir(pred[p]);
	printf("%d ",x[p]);
}

void scrie(int v[100001])
{
	for(int i=1 ; i<=n ; i++)
		printf("%d ",v[i]);
	printf("\n");
}

int main()
{
	int i,j;
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d ",&n);
	for(i=1;i<=n;i++)
		scanf("%d ",&x[i]);
	
	lung[1]=1;
	pred[1]=0;
	for(i=2;i<=n;i++)
	{
		lung[i]=0; pred[i]=0;
		for(j=1;j<i;j++)
		{
			if(x[j]>=x[i]) continue;
			if(lung[i]<lung[j])
			{
				lung[i]=lung[j];
				pred[i]=j;
			}
		}
		lung[i]++;
	}
	//scrie(lung);
	//scrie(pred);
	int p = pozmax();
	printf("%d\n",lung[p]);
	subsir(p);
}