Cod sursa(job #354453)

Utilizator bogdanacmDrutu Bogdan bogdanacm Data 8 octombrie 2009 09:38:21
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define NMAX 100005
#define pb push_back

vector <int> A;
vector <int> V;
int N;
int X[NMAX],D[NMAX];


int main()
{
	int i,a,j,max,poz;
	
	freopen("scmax.in","rt",stdin);
	freopen("scmax.out","wt",stdout);
	
	scanf("%d",&N);
	
	for (i=0;i<N;i++)
		scanf("%d",&a),	A.pb(a);

	for (i=0;i<N;i++)
	{
		X[i] = 1;
		D[i] = -1;
		for (j=0;j<i;j++)
			if ((X[j] + 1 > X[i]) && (A[j]<A[i]))  
				X[i] = X[j] + 1, D[i] = j;
	}
	
	max = X[0], poz = 0;
	for (i=1;i<N;i++)
		if (max < X[i])
			max = X[i], poz = i;
	printf("%d\n",max);

	for (;poz!=-1;V.pb(A[poz]), poz = D[poz]);
	for (i=V.size()-1; i>=0; printf("%d ",V[i]), i--);
	
	return 0;
}