Cod sursa(job #1260725)

Utilizator c0rn1Goran Cornel c0rn1 Data 11 noiembrie 2014 15:04:57
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#define nmax 100008

using namespace std;

int n, a[nmax], maxi;
struct{int m, p;}e[nmax];

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

void solve()
{
    for (int i=n; i>=1; i--)
    {
        e[i].m=1; e[i].p=0;
        for (int j=i+1; j<=n; j++)
            if (a[i]<a[j] && e[i].m<e[j].m+1)
            {
                e[i].m=e[j].m+1;
                e[i].p=j;
                maxi=max(maxi, e[i].m);
            }
    }
}

void afisare()
{
    int p;
    for (int i=1; i<=n; i++)
        if (e[i].m==maxi)
        {
            printf("%d\n%d", e[i].m, a[i]);
            p=i;
            break;
        }
    while (e[p].p!=0)
    {
        printf(" %d", a[e[p].p]);
        p=e[p].p;
    }
}

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

    return 0;
}