Cod sursa(job #2794585)

Utilizator lucriLuchian Cristian lucri Data 5 noiembrie 2021 10:00:21
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,v[100010],m[100010],nrm,r[100010],poz[100010];
int cb(int b,int e,int val)
{
    if(e<b)
        return e;
    int a=(e+b)/2;
    if(val>m[a])
        return cb(a+1,e,val);
    return cb(b,a-1,val);
}
int main()
{
    in>>n;
    for(int i=1;i<=n;++i)
        in>>v[i];
    for(int i=1;i<=n;++i)
    {
        int x=cb(1,nrm,v[i]);
        m[x+1]=v[i];
        poz[i]=x+1;
        if(x+1>=nrm)
        {
            nrm=x+1;
        }
    }
    out<<nrm<<'\n';
    int x=nrm;
    for(int i=n;i>=1;--i)
    {
        if(poz[i]==x)
        {
            --x;
            r[1+x]=v[i];
        }
    }
    for(int i=1;i<=nrm;++i)
        out<<r[i]<<' ';
    return 0;
}