Cod sursa(job #941835)

Utilizator andrei97andrei andrei97 Data 19 aprilie 2013 21:24:09
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>

int main()
{
    int v[100];short n, l[100], val, pmax = 0, k;
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 0; i < n; i++)scanf("%d", &v[i]);
/*---------------------------------lunguime l.i.s.--------------------------------------------*/
    for(int i = 0; i < n; i++)
    {
        val = 0;
        for(int j = i - 1; j >= 0; j--)
        {
            if(v[j] < v[i] && val < l[j])val = l[j];
        }
        l[i] = val + 1;
        if(l[pmax] < l[i])pmax = i;
    }
    printf("%i\n", l[pmax]);
    val = pmax;
/*--------------------------------------l.i.s-------------------------------------------------*/
    while(val >= 0){
        k = val - 1;
        label:
        while(k >= 0 && l[k] != l[val] - 1)k--;
        if(v[k] < v[val])
        {
            l[val] = -1;
            val = k;
        }
        else
        {
            k--;goto label;
        }
    }
    for(int i = 0; i <= pmax; i++)
    {
        if(l[i] == -1)printf("%i ", v[i]);
    }
    return 0;
}