Cod sursa(job #1090342)

Utilizator TeOOOVoina Teodora TeOOO Data 22 ianuarie 2014 17:00:31
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
//Include
#include <stdio.h>
#include <algorithm>
using namespace std;
FILE *in, *out;

//Constante
const int sz = (int)1e5+1;

//Variabile
int maxim, position, num;
int previous[sz], values[sz], best[sz];

//Functii
void construct(int pos)
{
    if(previous[pos])
        construct(previous[pos]);
    fprintf(out,"%d ", values[pos]);
}

//Main
int main()
{
	in = fopen("scmax.in", "rt");
	out = fopen("scmax.out", "wt");
    fscanf(in,"%d", &num);
    for(int i=1; i<=num; ++i)
        fscanf(in,"%d", &values[i]);

    for(int i=1; i<=num; ++i)
    {
        best[i] = 1;
        for(int j=1; j<i; ++j)
        {
            if(values[j] < values[i] && best[i] < best[j]+1)
            {
                best[i] = best[j]+1;
                previous[i] = j;
            }
        }
    }
    int position = max_element(best+1, best+num+1) - best;

    fprintf(out,"%d\n", best[position]);
    construct(position);

	fclose(in);
	fclose(out);
	return 0;
}