Cod sursa(job #2516140)

Utilizator PaulOrasanPaul Orasan PaulOrasan Data 30 decembrie 2019 14:35:22
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;

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

const int NMAX=100005;
int n, v[NMAX], best[NMAX], pre[NMAX];
void citire()
{
    fin>>n;
    for (int i=1; i<=n; i++)
        fin>>v[i];
}
void cautare(int i)
{
    for (int j=1; j<i; j++){
        if (best[j]+1>best[i] && v[j]<v[i]){
            best[i]=best[j]+1;
            pre[i]=j;
        }
    }
    if (best[i]==0)
        best[i]=1;
}
void rezolvare()
{
    best[1]=1;
    pre[1]=0;
    for (int i=2; i<=n; i++)
        cautare(i);
}
void construireDrum(int i)
{
    if (i!=0){
        construireDrum(pre[i]);
        fout<<v[i]<<' ';
    }
}
void afisare()
{
    int mx=0,p;
    for (int i=1; i<=n; i++){
        if (best[i]>mx){
            mx=best[i];
            p=i;
        }
    }
    fout<<mx<<'\n';
    construireDrum(p);
}
int main()
{
    citire();
    fin.close();
    rezolvare();
    afisare();
    fout.close();
    return 0;
}