Cod sursa(job #693217)

Utilizator impulseBagu Alexandru impulse Data 27 februarie 2012 10:59:07
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<stdio.h>
#include<iostream>
using namespace std;
#define mN 100001
#define filein "scmax.in"
#define fileout "scmax.out"

int A[mN], N, lMax[mN], pRev[mN], maxV, maxP;

int step1()
{
    FILE* fin = fopen(filein, "r");
    fscanf(fin, "%d", &N);
    for(int i = 0; i < N; i++)
        fscanf(fin, "%d", &A[i]);
    fclose(fin);
    return 0;
}

int step2()
{
    for(int i = N - 1; i > 0; i--) {
        lMax[i] = 1;
        for(int j = i + 1; j <= N; j++)
            if(A[i] < A[j])
                if(lMax[i] < lMax[j] + 1) {
                    lMax[i] = lMax[j] + 1,
                        pRev[i] = j;
                            if(maxV < lMax[i])
                                maxV = lMax[i],
                                    maxP = i;  } }
    return 0;
}

int step3()
{
    FILE* fout = fopen(fileout, "w");
    fprintf(fout, "%d\n", maxV);
    for(int i = maxP, j = 0; j != maxV; i = pRev[i], j++)
       fprintf(fout, "%d ", A[i]);
    fclose(fout);
    return 0;
}

int main()
{
    step1();
    step2();
    step3();
    return 0;
}