Cod sursa(job #540855)

Utilizator KoniacDocea Andrei Koniac Data 24 februarie 2011 15:38:14
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<stdio.h>
#define val 100001

FILE * f = fopen("scmax.in","r");
FILE * g = fopen("scmax.out","w");

int n,p,u,m;
int t[val];
int v[val];
int w[val];
int sol[val];

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(f);
	fclose(g);
	return 0;
}