Cod sursa(job #877375)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 12 februarie 2013 20:16:55
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <cstdio>

#define NMAX 100001

using namespace std;

int n;
int a[NMAX];
int p[NMAX];
int l[NMAX];
int pmax;

void read()
{
    freopen ("scmax.in", "r", stdin);

    scanf("%d\n", &n);
    for(int i = 1; i <= n; ++ i)
    {
        scanf("%d ", &a[i]);
        p[i] = -1;
        l[i] = 1;
    }
}

int solve()
{
    int lgmax = 0;

    for(int i = n - 1; i >= 1; -- i)
        for(int j = i + 1; j <= n; ++ j)
            if(a[j] > a[i] && l[i] < l[j] + 1)
            {
                l[i] = l[j] + 1;
                p[i] = j;

                if(l[i] > lgmax)
                {
                    lgmax = l[i];
                    pmax = i;
                }
            }

    return lgmax;
}

void write()
{
    while(p[pmax])
    {
        printf("%d ", a[pmax]);
        pmax = p[pmax];

        if(p[pmax] == -1)
        {
            printf("%d ", a[pmax]);
            break;
        }
    }

    printf("\n");
}

int main()
{
    read();

    freopen("scmax.out", "w", stdout);
    printf("%d\n", solve());
    write();

    return 0;
}