Cod sursa(job #752446)

Utilizator nalexandruIovan Alexandru Nicolae nalexandru Data 28 mai 2012 17:50:22
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
/*
 * main.cpp
 *
 *  Created on: 28 May 2012
 *      Author: Iovan Alexandru
 */

#include <fstream>
#define NMAX 100001

using namespace std;

fstream fin("scmax.in",ios::in);
fstream fout("scmax.out",ios::out);

int elem[NMAX],L[NMAX],pred[NMAX],n,pozMax;

void Citire(){
	fin>>n;
	for(int i=0;i<n;i++){
		fin>>elem[i];
		pred[i]=-1;
	}
}

void Dinamica(){
	int vMax=0;
	for(int i=0;i<n;i++){//pentru fiecare element
		L[i]=1;
		for(int j=i-1;j>=0;j--){
			if(elem[i]>elem[j] && L[i]<=L[j]){
				L[i]=L[j]+1;
				pred[i]=j;
			}
		}
		if(L[i]>vMax){
			pozMax=i;
			vMax=L[i];
		}
	}
}

void Tipareste(){
	fout<<L[pozMax]<<"\n";
	int p[NMAX],i=0,poz=pozMax;
	do{
		p[i]=elem[poz];
		i++;
		poz=pred[poz];
	}while(pred[poz]!=-1);
	p[i]=elem[poz];

	for(i=L[pozMax]-1;i>=0;i--)
		fout<<p[i]<<" ";
	fout.close();
	fin.close();
}

int main(){
	Citire();
	Dinamica();
	Tipareste();

	return 0;
}