Cod sursa(job #2134809)

Utilizator andr3i_kaabAndrei Ciineanu andr3i_kaab Data 18 februarie 2018 12:41:46
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("scmax.in");
ofstream c("scmax.out");

int n, lmax, a[100005], viz[100005], poz[100005];

void out(int i)
{
    if (poz[i]==0) cout<<a[i]<<" ";
    else out(poz[i]), cout<<a[i]<<" ";
}

int main()
{
    int i, j, st, dr, med;
    f>>n;
    for (i=1; i<=n; i++) f>>a[i];

    viz[1]=1; lmax=1;
    for (i=2; i<=n; i++)
    {
        st=1; dr=lmax;
        while (st<=dr)
        {
            med=(st+dr)/2;
            if (a[viz[med]]>=a[i]) dr=med-1;
            else st=med+1;
        }
        if (st==lmax+1) lmax++;
        viz[st]=i;
        poz[i]=viz[st-1];
    }
    cout<<lmax<<"\n";

    out(viz[lmax]);
    return 0;
}