Cod sursa(job #363008)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 11 noiembrie 2009 15:25:47
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<fstream.h>
ifstream f("scmax.in");
ofstream g("subsir.out");
int v[100001],p[100001],l[100001],a[100001],i,poz,n,k;

int cauta(int x){
	int p,u,m;
	p=0;u=k;
	while(p<=u){
		m=(p+u)/2;
		if(x>v[l[m]]&&x<v[l[m+1]]) return m;
	else if(x<v[l[m]])
		  u=m-1;
		else p=m+1;
	}
return k;
}

void rec(int k){
	if(k>0){
	  rec(p[k]);
	  g<<v[k]<<' ';
	}
	
}

int main(){
f>>n;
for(i=1;i<=n;i++)
	f>>v[i];
l[1]=1;k=1;
int max=0;int o=0;
for(i=2;i<=n;i++){
	poz=cauta(v[i]);
	p[i]=l[poz];
	a[i]=poz+1;
	if(a[i]>max){
		max=a[i];
		o=i;
	}
	l[poz+1]=i;
	if(poz+1>k)
		 k=poz+1;
}
g<<max<<'\n';
rec(o);
}