Cod sursa(job #177918)

Utilizator swift90Ionut Bogdanescu swift90 Data 13 aprilie 2008 20:44:19
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<stdio.h>
int nr[100100],h,best[100100],pred[100100],lista[100100];
int caut(int x){
	int st=0,dr=h,mij;
	while(st<dr){
		mij=(st+dr+1)>>1;
		if(nr[lista[mij]]==x)
			return mij-1;
		if(nr[lista[mij]]<x)
			st=mij;
		else
			dr=mij-1;
	}
	return st;
}
void scrie(int i){
	if(!i)
		return;
	scrie(pred[i]);
	printf("%d ",nr[i]);
}
int main(){
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	int n,i,max=0,poz;
	scanf("%d",&n);
	for(i=1;i<=n;++i){
		scanf("%d",&nr[i]);
		poz=caut(nr[i]);
		lista[poz+1]=i;
		if(poz+1>h)
			h=poz+1;
		best[i]=poz+1;
		pred[i]=lista[poz];
		if(best[i]>best[max])
			max=i;
	}
	printf("%d\n",best[max]);
	scrie(max);
	printf("\n");
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}