Cod sursa(job #1837007)

Utilizator medicinedoctoralexandru medicinedoctor Data 28 decembrie 2016 22:25:16
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("scmax.in");
ofstream cout("scmax.out");

vector <int> a,s;

void read()
{
    int n;
    cin >> n;
    a.resize(n);
    for (int i=0; i<a.size(); i++)
        cin >> a[i];
}

void write()
{
    cout << s.size() << '\n';
    for (int i=s.size()-1; i>=0; i--)
        cout << s[i] << ' ';
}

void magic(vector <int> &x)
{
    vector <int> y(a.size());
    fill(y.begin()+1,y.end(),0);
    y[0]=1;
    x=y;
}

void solve()
{
    vector <int> x;
    magic(x);

    for (int i=1,j,mx,m; i<x.size(); x[i]=1+mx,i++)
        for (j=1,mx=0; j<i; j++)
        {
            if (a[i]>a[j] && x[j]>mx) mx=x[j];
        }
    int m=0;
    for (int i=1; i<x.size(); i++)
        if (x[i]>x[m]) m=i;

    s.push_back(a[m]);
    for (int i=m-1,u=m; s.size()!=x[m]; i--)
        if (x[i]<x[u])
        {
            s.push_back(a[i]);
            u=i;
        }
}

main()
{
    read();
    solve();
    write();
}