Cod sursa(job #324466)

Utilizator marinMari n marin Data 16 iunie 2009 11:43:03
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#define DIM 100010

int X[DIM], V[DIM], T[DIM];
int n,i,p,u,mid,m;

FILE *g = fopen("scmax.out","w");
void sol(int poz) {
	if (poz) {
		sol(T[poz]);
		fprintf(g,"%d ",V[poz]);
	}
}

int main(){
	FILE *f = fopen("scmax.in","r");
	fscanf(f,"%d",&n);
	for (i=1;i<=n;i++)
		fscanf(f,"%d",&V[i]);
	fclose(f);
	
	X[1] = 1; m = 1;
	for (i=2;i<=n;i++) {
		p = 1; u = m;
		while (p<=u) {
			mid = p+(u-p)/2;
			if (V[X[mid]] < V[i])
				p = mid + 1;
			else
				u = mid - 1;
		}
		if (p>m) {
			m++;
			X[m] = i;
			T[i] = X[m-1];
		} else {
			if (V[X[p]]>V[i]) {
				X[p] = i;
				T[i] = X[p-1];
			}
		}
		
		
/*
		if (p>u) {
			if (p>m)
				m++;
			X[p] = i;
			T[i] = X[p-1];
		}
*/
	}

	fprintf(g,"%d\n",m);
	sol(X[m]);
	fclose(g);
	
	return 0;
}