Cod sursa(job #840461)

Utilizator s4d1ckOrtan Seby s4d1ck Data 22 decembrie 2012 18:25:42
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
/**
 * Sa se determine un subsir al lui a care este ordonat strict crescator si care are lungimea maxima.
 * Restrictii:
 * 1 ≤ N ≤ 100 000
 * 1 ≤ ai ≤ 2 000 000 000, pentru orice i de la 1 la N
 */

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

#define MAX 100000

int main()
{
	int n;
	FILE* in = fopen("scmax.in", "r");
	fscanf(in, "%d", &n);
	int v[n], max[n], next[n];
	for (int i = 0; i<n; i++)
	{
		fscanf(in, "%d", &v[i]);
		max[i] = 1;
	}
	fclose(in);
	
	int cmax, ind;
	for (int i = n-1; i>=0; i--)
	{
		cmax = 0; ind = -1;
		for (int j = i+1; j<n; j++)
		{
			if (v[i] < v[j] && max[j] > cmax)
			{
				cmax = max[j];
				ind = j;
			}
		}
		max[i] += cmax;
		next[i] = ind;
	}
	
	cmax = max[0]; ind = 0;
	for (int i = 1; i<n; i++)
		if (max[i] > cmax) {
			cmax = max[i];
			ind = i;
		}
		
	FILE* out = fopen("scmax.out", "w");
			
	fprintf(out, "%d\n", cmax);
	while (ind != -1)
	{
		fprintf(out, "%d ", v[ind]);
		ind = next[ind];
	}
	fclose(out);
	
	return 0;
}