Cod sursa(job #1328981)

Utilizator Vali_DeaconuVali Deaconu Vali_Deaconu Data 28 ianuarie 2015 22:08:35
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
#define N   100005
using namespace std;
int n, i, j, v[N], Lmax[N], urm[N], max, sol, p;

void citire() {
    freopen ("scmax.in", "r", stdin);
    freopen ("scmax.out", "w", stdout);
    scanf ("%d", &n);
    for (i=1; i<=n; ++i)
        scanf ("%d", &v[i]);
}
void dinamic() {
    int i, j;
    Lmax[n] = 1;
    urm[n] = -1;
    max = 1;
    p = n;
    for (i=n-1; i>=1; --i) {
        Lmax[i] = 1;
        urm[i] = -1;
        for (j=i+1; j<=n; ++j) {
            if (v[i] < v[j] && Lmax[i] < Lmax[j]+1) {
                Lmax[i] = 1 + Lmax[j];
                urm[i] = j;
                if (Lmax[i] > max) {
                    max = Lmax[i];
                    p = i;
                }
            }
        }
    }
}

void constructie() {
    int i;
    i = p;
    while (i != -1) {
        printf ("%d ", v[i]);
        i = urm[i];
    }
}

int main()
{
    citire();
    dinamic();
    printf ("%d\n", max);
    constructie();
    return 0;
}