Cod sursa(job #797630)

Utilizator marinMari n marin Data 14 octombrie 2012 15:31:59
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 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>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;
}