Cod sursa(job #818904)

Utilizator toranagahVlad Badelita toranagah Data 18 noiembrie 2012 11:54:44
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MAX_N = 100100;

int v[MAX_N];
int pd[MAX_N];
int rec[MAX_N];
int N;
stack<int> st;

int main() {
	fin >> N;
	for (int i = 1; i <= N; ++i) {
		fin >> v[i];
	}
	int result = 0, pos = 0;
	for (int i = 1; i <= N; ++i) {
		for (int j = 0; j < i; ++j) {
			if (v[i] > v[j] && pd[j] + 1 > pd[i]) {
				pd[i] = pd[j] + 1;
				rec[i] = j;
				if (pd[i] > result) {
					result = pd[i];
					pos = i;
				}
			} 
		}
	}
	for (int i = result; i > 0; --i) {
		st.push(pos);
		pos = rec[pos];
	}

	fout << result << '\n';
	while (!st.empty()) {
		fout << v[st.top()] << ' ';
		st.pop(); 
	}
	return 0;
}