Cod sursa(job #3267287)

Utilizator robertcosacCosac Robert-Mihai robertcosac Data 11 ianuarie 2025 10:45:00
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100009], sir[100009], poz[100009], ans[100009];
void solve (int last_poz, int curr_poz)
{
    if (last_poz==0) return;
    for (int i=curr_poz; i>=1; i--)
    {
        if (poz[i]==last_poz)
        {
            ans[last_poz]=v[i];
            solve (last_poz-1, i-1);
            break;
        }
    }

}
int main ()
{
    int n, i, cnt=0;
    f >> n;
    for (i=1; i<=n; i++)
        f >> v[i];
    for (i=1; i<=n; i++)
    {
        int st=1, dr=cnt, retine=0;
        while (st<=dr)
        {
            int mij=(st+dr)/2;
            if (sir[mij]>=v[i])
            {
                retine=mij;
                dr=mij-1;
            }
            else st=mij+1;
        }
        if (retine)
        {
            sir[retine]=v[i];
            poz[i]=retine;
        }
        else
        {
            sir[++cnt]=v[i];
            poz[i]=cnt;
        }
    }
    g << cnt<<'\n';
    int last_poz=cnt;
    solve (last_poz, n);
    for (int i=1; i<=cnt; i++)
        g << ans[i] << ' ';
}