Cod sursa(job #279832)

Utilizator robertzelXXX XXX robertzel Data 12 martie 2009 23:57:02
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#define NMAX 100//000

typedef int sir[NMAX];
int n, i, j, max;
sir m, k;

void citeste ()
{
	FILE * in = fopen("sir.in", "r");

	fscanf(in, "%d", &n);

	for (i=0; i<n; i++)
	{
		fscanf(in,"%d", &m[i]);
	}

	fclose(in);
}

void afiseaza (sir x)
{
	printf("\n");

	for (i=0; i<n; i++)
	{
		printf("%3d", x[i]);
	}
}

void calculeaza ()
{
	k[n-1] = 1;

	//parcurge sirul incepand de la capat
	for (i=n-2; i>=0; i--)
	{
		//cauta un numar mai mare ca cel actual (cel din m[i])
		for (j=i+1; j<n; j++)
		{
			//cand gaseste un nr mai mare se opreste
			if (m[j] > m[i])
			{
				max  = k[j] + 1;
				k[i] = max;
				break;
			}
		}

		//verifica daca a gasit un numar mai mare
		if (k[i] == 0)
		{
			k[i] = 1;
		}
	}
}

void sirul ()
{
	printf("%d \n", max);

	max++;

	for (i=0; i<n; i++)
	{
		if (k[i] < max)
		{
			printf("%d ", m[i]);
                        max--;
		}
	}
}

int main ()
{
	citeste();
	calculeaza();
	sirul();

	return 0;
}