Cod sursa(job #930273)

Utilizator tsubyRazvan Idomir tsuby Data 27 martie 2013 15:49:24
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#define N 100000
using namespace std;

int n, a[N], best_length[N], predecesor[N];
int p;
void citire()
{
    scanf("%d ", &n);
    for(int i = 1; i <= n; i++)
    {
        scanf("%d ", &a[i]);
        best_length[i] = 1;
        predecesor[i] = -1;
    }
}

void dinamica()
{
    for(int i = n-1; i >=1; i--)
        for(int j = i+1; j <= n; j++)
            if(best_length[i] <= best_length[j] && a[i] < a[j])
            {
                best_length[i] = best_length[j] + 1;
                predecesor[i] = j;
            }
}

void maxim()
{
    int max = -1;
    for(int i = 1; i <= n; i++)
        if(best_length[i] > max)
        {
            max = best_length[i];
            p = i;
        }
    printf("%d\n", max);
}

void afisare()
{
    maxim();
    for(int i = p; i != -1; )
    {
        printf("%d ", a[i]);
        i = predecesor[i];
    }
}
int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    citire();
    dinamica();
    afisare();
    return 0;
}