Cod sursa(job #1994911)

Utilizator zanugMatyas Gergely zanug Data 26 iunie 2017 16:21:18
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <stack>

using namespace std;

const int N = 1e5 + 10;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n, x[N], db[N], el[N];

int main()
{
    fin >> n;
    for(int i = 0; i < n; ++i)
    {
        fin >> x[i];
        db[i] = 1;
        el[i] = -1;
    }

    for(int i = 1; i < n; ++i)
    {
        for(int j = 0; j < i; ++j)
        {
            if(x[i] > x[j] && db[j] + 1 > db[i])
            {
                db[i] = db[j] + 1;
                el[i] = j;
            }
        }
    }

    int maxi = 1;
    int maxiind = 0;
    for(int i = 0; i < n; ++i)
    {
        if(db[i] > maxi)
        {
            maxi = db[i];
            maxiind = i;
        }
    }

    fout << maxi << "\n";

    stack <int> st;
    while(maxiind >= 0)
    {
        st.push(x[maxiind]);
        maxiind = el[maxiind];
    }

    for(int i = 0; i < maxi; ++i)
    {
        fout << st.top() << " ";
        st.pop();
    }

    return 0;
}