Cod sursa(job #520494)

Utilizator vlad.maneaVlad Manea vlad.manea Data 9 ianuarie 2011 10:41:19
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <vector>
#define NMax 100000
using namespace std;

int N, M;
int V[NMax], S[NMax], P[NMax];

void read()
{
	int i;
	ifstream fin("scmax.in");
	fin >> N;
	for (i = 0; i < N; ++i)
		fin >> V[i];
	fin.close();
}

void solve()
{
	int i, j;
	S[0] = 1;
	P[0] = -1;
	for (i = 0; i < N; ++i)
	{
		P[i] = -1;
		for (j = i - 1; j >= 0; --j)
			if (V[j] < V[i] && S[j] > S[i])
			{
				S[i] = S[j];
				P[i] = j;
			}
		S[i]++;
	}
}

void back(ofstream &fout, const int x)
{
	if (x == -1)
		return;
	back(fout, P[x]);
	fout << V[x] << ' ';
}

void write()
{
	int i, x;
	ofstream fout("scmax.out");
	for (i = 0; i < N; ++i)
		if (S[i] > M)
		{
			M = S[i];
			x = i;
		}
	fout << M << '\n';
	back(fout, x);
	fout.close();
}

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