Cod sursa(job #715244)

Utilizator Kira96Denis Mita Kira96 Data 16 martie 2012 21:48:29
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb

#include <fstream.h>

using namespace std;

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

#define MAXX 100010 //se fol pt a mai optimiza un pic
int v[MAXX],s[MAXX],l[MAXX],n,i,j,k,p,a,max;

int caut_binar(int x){
	int m,i,j;
	i=1;
	j=k;
	while(i<=j){
		m=(i+j)/2;
		if(s[m-1]<x&&s[m]>=x)
			return m;
		else if(s[m]>=x)
				j=m-1;
		else i=m+1;
	}	
	return 0;
	
}

int main(){
	f>>n;
	for(i=1;i<=n;i++)
		f>>v[i];
	s[1]=v[1];
	l[1]=1;
	k=1;
	for(p=2;p<=n;p++){
		a=caut_binar(v[p]);
		if(a==0){
			s[++k]=v[p];
			l[p]=k;
		}
		else {
			s[a]=v[p];
			l[p]=a;
		}
	}

	for(i=1;i<=n;i++)
		if(l[i]>max)
			{max=l[i];p=i;
			}
	k=0;
	g<<max<<"\n";
	while(max){
		if(l[p]==max) {
			s[++k]=v[p]; max--;
		}
		p--;
			
	}
	for(i=k;i>0;i--)
		g<<s[i]<<" ";

		
	
	
	
	f.close();
	g.close();
	return 0;
}