Cod sursa(job #552502)

Utilizator sebii_cSebastian Claici sebii_c Data 12 martie 2011 14:41:29
Problema Subsir crescator maximal Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#define MAX 100002

int A[MAX], L[MAX], T[MAX], S[MAX];
int N;

void Citire()
{
	FILE *fin = fopen("scmax.in", "r");
	fscanf(fin, "%d", &N);
	int i;	
	for (i=1; i<=N; ++i)
		fscanf(fin, "%d", &A[i]);
	fclose(fin);
}

int cautare_bin(int x, int low, int high)
{
	if (low > high)
	 	return low-1;
	if (x < A[S[low]])
		return low-1;
	if (x > A[S[high]])
		return high;
	int mid = (low+high)/2;
	if (A[S[mid]] == x)
		return mid - 1;
	if (x < A[S[mid]])
		cautare_bin(x, low, mid);
	else 
		cautare_bin(x, mid+1, high);
}

void afisare(FILE *fout, int poz)
{
	if (poz == 0)
		return;
	afisare(fout, T[poz]);
	fprintf(fout, "%d ", A[poz]);
}

int main()
{
	Citire();
	int len=0;
	int i, poz;
	S[0] = 0;
        for (i=1;i<=N;++i)
	{
		poz=cautare_bin(A[i], 1, len);
		S[poz+1] = i;
		T[i] = S[poz];
		L[i] = poz+1;
		if (poz == len)
			++len;
	}
	FILE *fout = fopen("scmax.out", "w");	
	fprintf(fout, "%d\n", len);
	afisare(fout, S[len]);
	fclose(fout);
	return 0;
}