Cod sursa(job #246229)

Utilizator crissuMarin Cristina crissu Data 20 ianuarie 2009 13:16:43
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include<stdio.h>
int a[100005],N,x[100005],lmax;
int find(int);
int lungime();
int main(){
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&N);
	for(int i=1;i<=N;++i)
		scanf("%d",&a[i]);
	printf("%d",lungime());
	return 0;
}
int find(int val){
	int p=1,u=lmax,mij;
	while(p<u){
		mij=(p+u)/2;
		if(val<=x[mij])
			u=mij;
		else
			p=mij+1;
	}
	if(x[p]<val)
		return p+1;
	return p;
}
int lungime(){
	lmax=0;
	x[++lmax]=a[1];
	for(int i=2;i<=N;++i)
		if(a[i]>x[lmax])
			x[++lmax]=a[i];
		else
			x[find(a[i])]=a[i];
	return lmax;
}