Cod sursa(job #2980429)

Utilizator proflaurianPanaete Adrian proflaurian Data 16 februarie 2023 15:05:28
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int N = 100010;
int n,lgMax,a[N],b[N],p[N],v[N];
void afiseazaRecursiv(int i)
{
    if(i==0)
        return;
    afiseazaRecursiv(b[i]);
    g<<a[i]<<' ';
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>a[i];
    for(int i=1;i<=n;i++)
    {
        int lo=0,hi=lgMax+1,mi;
        while(hi-lo>1)
        {
            mi=(lo+hi)/2;
            if(v[mi]<a[i])
                lo=mi;
            else
                hi=mi;
        }
        if(hi==lgMax+1)
            lgMax++;
        p[hi]=i;
        v[hi]=a[i];
        b[i]=p[lo];
    }
    g<<lgMax<<'\n';
    afiseazaRecursiv(p[lgMax]);
    return 0;
}