Cod sursa(job #324442)

Utilizator marinMari n marin Data 16 iunie 2009 11:13:07
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 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])
//				break;
			if (V[X[mid]] <= V[i])
				p = mid + 1;
			else
				u = mid - 1;
		}
		if (p>m) {
			m++;
			X[m] = i;
			T[m] = X[m-1];
		} else {
			if (X[p]>X[i]) {
				X[p] = i;
				T[p] = X[p-1];
			}
		}
	}

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