Cod sursa(job #1260722)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 11 noiembrie 2014 15:02:06
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <cstdio>
#define MAXN 100010

using namespace std;

int n;
int a[MAXN], best[MAXN], poz, maxi;

void dinamica()
{
    for (int i = 1; i <= n; i++)
        best[i] = 1;
    for (int i = n-1; i > 0; i--)
        for (int j = i; j <= n; j++)
            if (a[i] < a[j] && best[j]+1 > best[i])
                best[i] = best[j] + 1;
    for (int i = 1; i <= n; i++)
        if (best[i] > maxi)
        {
            maxi = best[i];
            poz = i;
        }
    printf("%d\n", maxi);
}

void drum(int p)
{
    cout << a[p] << " ";
    for (int i = p+1; i <= n; i++)
        if (best[p] == best[i]+1 && a[p] < a[i])
        {
            drum(i);
            return;
        }
}

int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);

    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    dinamica();
    drum(poz);
    return 0;
}