Cod sursa(job #2972458)

Utilizator Laura139Anghel Laura Laura139 Data 29 ianuarie 2023 15:24:47
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>

using namespace std;

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

int best[100005],f[100005],v[100005],k=0,rez[100005];

int cb(int nr)
{
    int st=1,dr=k,mij,poz=0;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[best[mij]]<nr)
        {
            poz=mij;
            st=mij+1;
        }
        else
            dr=mij-1;
    }
    return poz;
}

int main()
{
    int n;
    in>>n;
    for(int i=1;i<=n;i++)
    {
        in>>v[i];
        int poz=cb(v[i]);
        best[poz+1]=i;
        if(poz==k)
            k++;
        f[i]=best[poz];
    }
    out<<k<<'\n';
    int pozc=best[k],d=0;
    while(pozc!=0)
    {
        rez[++d]=v[pozc];
        pozc=f[pozc];
    }
    for(int i=d;i>=1;i--)
        out<<rez[i]<<" ";
    return 0;
}