Cod sursa(job #481804)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 1 septembrie 2010 18:31:36
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>

using namespace std;

ifstream in("scmax.in");
ofstream out("scmax.out");

int v[1<<17],x[1<<17],pred[1<<17],m=1,n;

int caut(int a)
{
	int i,pas = 1<<16;
	for(i=0 ; pas ; pas>>=1)
		if(i+pas<=m && v[x[i+pas]]<a)
			i+=pas;
	return i+1;
}

void citire(){
	int i;
	in>>n;
	for(i=1;i<=n;i++){
		in>>v[i];
	}
}

void scriere(int b){
	if(pred[b]!=0){
		scriere(pred[b]);
	}
	out<<v[b]<<" ";
}


void prelucrare(){
	int aux,i;
	x[1]=1;
	for(i=2;i<=n;i++){
		aux=caut(v[i]);
		if(aux>m)
			x[++m]=i;
		else
			x[aux]=i;
		pred[i] = x[aux-1];
	}
	out<<m<<"\n";
	scriere(x[m]);
}

int main(){
	citire();
	prelucrare();
	return 0;
}