Cod sursa(job #347950)

Utilizator serbanlupulupulescu serban serbanlupu Data 13 septembrie 2009 18:23:15
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>

using namespace std;

int v[100001];
int tata[100001];
int dp[100001];
int aux[100001];
int nr_aux;
int nr_v;

void solve()
{
	fstream f("scmax.in", ios::in);
	fstream g("scmax.out", ios::out);

	f>>nr_v;
	for (int i=1; i<=nr_v; ++i)
		f>>v[i];

	dp[1]=1;
	tata[1]=0;

	for (int i=2; i<=nr_v ;++i)
	{
		dp[i]=1;
		tata[i]=0;
		for (int j=1; j<i; ++j)
			if (dp[i] <= dp[j] && v[i] > v[j])
			{
				dp[i]=dp[j]+1;
				tata[i]=j;
			}
	}
	
	int max=0;
	int poz;
	for (int i=1; i<=nr_v; ++i)
	{
		if (max < dp[i])
		{
			max=dp[i];
			poz=i;
		}
	}

	nr_aux=max;

	for (int i=nr_aux; i>=1; --i)
	{
		aux[i]=v[poz];
		poz=tata[poz];
	}

	g<<max<<"\n"; 
	for (int i=1; i<=nr_aux; ++i)
		g<<aux[i]<<" ";
}

int main()
{
	solve();
	return 0;
}