Cod sursa(job #857396)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 17 ianuarie 2013 19:53:32
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<fstream>
#define DIM 100010
using namespace std;

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

int n,k,L[DIM],V[DIM],i,poz,T[DIM];

int cautare(int nr){
	
	int st=1,dr=k;
	int mid;
	while(st<=dr){
		mid=(st+dr)/2;
		if(V[L[mid]]>nr)
			dr=mid-1;
		else{
			if(V[L[mid+1]]>nr)
				return mid;
			else
				st=mid+1;
		}
	}
	if(V[L[mid]]>nr)
		mid--;
	return mid;
}

void print(int x){
	if(x){
		print(T[x]);
		g<<V[x]<<" ";
	}
}

int main(){
	
	f>>n;
	
	for(i=1;i<=n;i++)
		f>>V[i];
	
	L[1]=1;k=1;
	
	for(i=2;i<=n;i++){
		poz=cautare(V[i]);
		if(V[i]==V[L[poz]])
			continue;
		if(poz>=k)
			L[++k]=i;
		else
			L[poz+1]=i;
		
		T[i]=L[poz];
		
	}
	g<<k<<"\n";
	print(L[k]);
	return 0;
}