Cod sursa(job #457208)

Utilizator EllyMilca Mihaela Elena Elly Data 18 mai 2010 16:41:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream.h>
#include <fstream.h>

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

#define MAXX 100010
int v[MAXX],s[MAXX],l[MAXX],n,i,j,k,p,a,max;

int 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=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;
}