Cod sursa(job #2867458)

Utilizator 21CalaDarius Calaianu 21Cala Data 10 martie 2022 12:53:00
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int n,v[100005],l[100005],best[100005],p[100005],nr;

void afis(int i)
{
    if(p[i]>0) afis(p[i]);
    fout << v[i] << " ";
}

int caut(int x)
{
    int p,u,m;
    p=0;
    u=nr;
    m = (p+u)/2;
    while(p<=u)
    {
        if(v[l[m]]<x && x<=v[l[m+1]])
            return m;
        else if(x>v[l[m+1]])
        {
            p = m+1;
            m=(p+u)/1;
        }
        else
        {
            u = m-1;
            m=(p+u)/2;
        }
    }
    return nr;
}

int main()
{
    int i,j,poz;
    nr = 1;
    fin >> n;
    for(int i=1;i<=n;++i)
        fin >> v[i];
    best[1]=l[1]=1;
    l[0]=0;
    for(int i=2;i<=n;++i)
    {
        poz = caut(v[i]);
        p[i]=l[poz];
        best[i]=poz+1;
        l[poz + 1] = i;
        if(nr< poz+1) nr=poz+1;
    }
    int maxim =0;
    poz =0;
    for(int i=1;i<=n;++i)
    {
        if(maxim < best[i])
        {
            maxim = best[i];
            poz = i;
        }
    }
    fout << maxim << '\n';
    afis(poz);
    return 0;
}