Cod sursa(job #1952539)

Utilizator matystroiaStroia Matei matystroia Data 4 aprilie 2017 10:51:56
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;

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

const int N=1e5+5;

int n, v[N], m[N], p[N], lmax;

void afis(int x)
{
    if(p[x]!=-1) afis(p[x]);
    fout<<v[x]<<" ";
}

int main()
{
    fin>>n;
    for(int i=0;i<n;++i)
        fin>>v[i];

    m[0]=-1;
    for(int i=0;i<n;++i)
    {
        int l=1, r=lmax;
        while(l<=r)
        {
            int mid=ceil((l+r)/2);
            if(v[i]>v[m[mid]])
                l=mid+1;
            else
                r=mid-1;
        }
        m[l]=i;
        p[i]=m[l-1];
        lmax=max(lmax, l);
    }
    fout<<lmax<<'\n';
    afis(m[lmax]);
    return 0;
}