Cod sursa(job #539663)

Utilizator Robert29FMI Tilica Robert Robert29 Data 23 februarie 2011 10:55:59
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include<stdio.h>
FILE*f=fopen("scmax.in","r");
FILE*g=fopen("scmax.out","w");
int n,t[100001],v[100001],w[100001],sol[100001],p,u,m;
int main() {
	fscanf(f,"%d",&n);
	for(int i=1;i<=n;++i)
		fscanf(f,"%d",&v[i]);
		
	w[1]=w[0]=1;
	for(int i=2;i<=n;++i){
		p=1;
		u=w[0];
		while(p<=u){
			m=(p+u)/2;
			if(v[i]>v[w[m]])
				p=m+1;
			else
				u=m-1;
		}
		
		w[p]=i;
		if(p>w[0])
			w[0]=p;	
		t[i]=w[u];		
	}
	
	fprintf(g,"%d\n",w[0]);
	
	u=w[w[0]];
	for(int i=1;i<=w[0];++i){
		sol[i]=v[u];
		u=t[u];
	}
	
	for(int i=w[0];i;--i)
		fprintf(g,"%d ",sol[i]);
	fclose(g);
	fclose(f);
	return 0;
}