Cod sursa(job #221861)

Utilizator andyciupCiupan Andrei andyciup Data 18 noiembrie 2008 17:24:07
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<stdio.h>
#define N 100005
int n, v[N], lung[N], pred[N], contor=0;
void parcurg(){
	for(int i=1; i<=n; ++i){
		int max=0;
		lung[i]=1;
		pred[i]=1;
		for(int j=1;j<i;++j)
			if(v[j]<v[i]&&lung[j]>max){
				max=lung[j];
				pred[i]=j;
			}
		lung[i]=max+1;
	}
}
int pozmax(){
	int pmax=1;
	for(int i=1; i<=n; ++i){
		if(lung[i]>lung[pmax])
			pmax=i;
	}
	return pmax;
}

void baga(int x)
{
	contor++;
	if(contor<=lung[pozmax()]){
		baga(pred[x]);
		printf("%d ", v[x]);
	}
}

int main(){
	freopen("scmax.in", "r", stdin);
	freopen("scmax.out", "w", stdout);
	scanf("%d", &n);
	for(int i=1; i<=n;++i)
		scanf("%d", &v[i]);
	parcurg();
	int a=pozmax();
	printf("%d\n", lung[a]);
	baga(a);
	return 0;
}