Cod sursa(job #2972453)

Utilizator Laura139Anghel Laura Laura139 Data 29 ianuarie 2023 15:09:10
Problema Subsir crescator maximal Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>

using namespace std;

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

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

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 ant=-1;
    for(int i=1;i<=n;i++)
    {
        if(ant!=v[f[i]] && f[i]!=0)
        {
            out<<v[f[i]]<<" ";
            ant=v[f[i]];
        }
    }
    out<<v[best[k]];
    return 0;
}