Cod sursa(job #543587)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 28 februarie 2011 12:32:06
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <cstdio>
#define NMAX 100005
using namespace std;

int s[NMAX], l[NMAX], ant[NMAX], sol[NMAX], N, maxx, poz;

void read(void)
{
	FILE *f = fopen("scmax.in", "r");
	fscanf(f, "%d", &N);
	for(int i = 1; i <= N; ++i)
		fscanf(f, "%d", &s[i]);
	
	fclose(f);
}
void scm(void)
{
	int i, j;
	for(int i = 1; i <= N; ++i)
		l[i] = 1, ant[i] = 1;
	
	for(int i = 2; i <= N; ++i)
		for(int j = 1; j < i; ++j)
			if(s[i] > s[j] && l[i] < l[j] + 1)
			{
				l[i] = l[i] + 1;
				ant[i] = j;
				if(l[i] > maxx)
					maxx = l[i], poz = i;
				
			}

	int cnt = maxx;
	do
	{
		sol[cnt--] = s[poz];
		poz = ant[poz];
	}while(cnt);
	
}
void print(void)
{
	FILE *g = fopen("scmax.out", "w");
	fprintf(g, "%d\n", maxx);
	for(int i = 1; i <= maxx; ++i)
		fprintf(g, "%d ", sol[i]);
	
	fclose(g);
}
int main(void)
{
	read();
	scm();
	print();
	
	return 0;
}