Cod sursa(job #2843471)

Utilizator cdenisCovei Denis cdenis Data 2 februarie 2022 15:32:36
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int MAX=1e5+5;
int n,k,v[MAX],sol[MAX],t[MAX],st,dr,m,poz,u;

int main ()
{
    fin >> n;
    for(int i=1;i<=n;i++)
        fin >> v[i];
    for(int i=1;i<=n;i++)
    {
        st=1;
        dr=k;
        while(st<=dr)
        {
            m=(st+dr)/2;
            if(v[sol[m]]<v[i])
                st=m+1;
            else
                dr=m-1;
        }
        poz=st;
        t[i]=sol[poz-1];
        sol[poz]=i;
        if(poz>k)
            k=poz;
    }
    u=sol[k];
    for(int j=k;j>=1;j--)
    {
        sol[j]=v[u];
        u=t[u];
    }
    fout << k << '\n';
    for(int i=1;i<=k;i++)
        fout << sol[i] << " ";
    return 0;
}