Cod sursa(job #2588635)

Utilizator As932Stanciu Andreea As932 Data 25 martie 2020 09:54:31
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");

const int nmax=100005;

int n,best[nmax],pos[nmax];
long long a[nmax];

void read_data()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>a[i];
}

void solve()
{
    for(int i=1;i<=n;i++)
        best[i]=1;

    for(int j=1;j<=n;j++)
        for(int i=1;i<j;i++)
            if(a[j]>a[i])
                if(best[i]+1>best[j])
                {
                    best[j]=best[i]+1;
                    pos[j]=i;
                }

    int mx=0,posMx=0;
    for(int it=1;it<=n;it++)
        if(best[it]>mx)
        {
            mx=best[it];
            posMx=it;
        }

    vector <long long> v;
    v.push_back(mx);
    while(posMx!=0)
    {
        v.push_back(a[posMx]);
        posMx=pos[posMx];
    }

    fout<<mx<<"\n";
    for(int it=v.size()-1;it>0;it--)
        fout<<v[it]<<" ";
}

int main()
{
    read_data();
    solve();

    return 0;
}