Cod sursa(job #858729)

Utilizator tsubyRazvan Idomir tsuby Data 19 ianuarie 2013 12:00:50
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#define N 100005

int n, sir[N], length[N], urm[N];

void citire()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d ", &sir[i]);
        length[i] = 1;
        urm[i] = -1;
    }
}

void lungime()
{
    for(int i=n;i>=1;i--)
    {
        for(int j=i+1;j<=n;j++)
            if(length[i] < 1+length[j] && sir[j] > sir[i])
            {
                length[i] = length[j] + 1;
                urm[i] = j;
            }
    }
}

int maxim_length()
{
    int max = -1;
    int p = 0;
    for(int i=1;i<=n;i++)
        if(max < length[i])
        {
            max = length[i];
            p = i;
        }

    return p;
}

void afisare()
{
    int ok = 0;
    int p = maxim_length();
    printf("%d\n", length[p]);
    for(int i=p;i!=-1;)
    {
        printf("%d ",sir[i]);
        i = urm[i];
    }
}

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    citire();
    lungime();
    afisare();
    return 0;
}