Cod sursa(job #777556)

Utilizator florin_marius90Florin Marius Popescu florin_marius90 Data 12 august 2012 18:01:24
Problema Subsir crescator maximal Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>

#define NMAX 100000

void scmax(int *v, int n)
{
	int sol[100000];
	memset(sol, 0, n * sizeof(int));
	int global_max, global_index_max;
	sol[0] = 1;
	global_max = sol[0];
	global_index_max = 0;
	int i;
	for (i = 1; i < n; i++)
	{
		int j;
		int max = 0;
		
		for (j = 0; j < i; j++)
		{
			if (v[j] < v[i] && sol[j] > max)
			{
				max = sol[j];
				
			}
		}
		max++;
		sol[i] = max;
		if (global_max < max)
		{
			global_max = max;
			global_index_max = i;
		}
	}
	
	FILE *f = fopen("scmax.out", "w");
	fprintf(f, "%d\n", global_max);
	
	sol[global_index_max] = -1;	

	for (i = global_index_max - 1; i >= 0; --i)
	{
		if (global_max == 0)
		{
			break;
		}
		if (global_max - 1 == sol[i])
		{
			global_max--;
			sol[i] = -1;
		}
	}
	for (i = 0 ; i < n; i++)
	{
		if (sol[i] == -1)
		fprintf(f, "%d ", v[i]);
	}
	
} 

int main()
{

	int n, v[NMAX];
	FILE *f = fopen("scmax.in", "r");

	fscanf(f, "%d", &n);
	int i;
	for (i = 0; i < n; i++)
	{
		fscanf(f, "%i", v + i);
	}
	fclose(f);
	scmax(v, n);
	return 0;
}