Cod sursa(job #2436396)

Utilizator AlexAboAbogatoaie Alexandru AlexAbo Data 5 iulie 2019 17:25:06
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int N = 100010;
int n,Lmax,lo,hi,mi,x[N],b[N],s[N],p[N];
void afisare(int);
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>x[i];
    for(int i=1;i<=n;i++)
    {
        lo=0;hi=Lmax+1;
        while(hi-lo>1)
        {
            mi=(lo+hi)/2;
            if(s[mi]<x[i])
                lo=mi;
            else
                hi=mi;
        }
        b[i]=p[lo];
        s[hi]=x[i];
        p[hi]=i;
        if(hi>Lmax)Lmax=hi;
    }
    g<<Lmax<<'\n';
    afisare(p[Lmax]);
    return 0;
}

void afisare(int i)
{
    if(i==0)return;
    afisare(b[i]);
    g<<x[i]<<' ';
}