Cod sursa(job #3353153)

Utilizator coldsh1tANdrei coldsh1t Data 5 mai 2026 11:26:49
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <iostream>

using namespace std;

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

int v[100005], pred[100005], poz[100005], sol[100005];

int main()
{
    int n;
    fin>>n;

    for(int i=1; i<=n; i++)
    {
        fin>>v[i];
    }

    int lmax=0;

    for(int i=1; i<=n; i++)
    {
        int st=1, dr=lmax, p=0;

        while(st<=dr)
        {
            int mijl=(st+dr)/2;
            if(v[poz[mijl]]<v[i])
            {
                p=mijl;
                st=mijl+1;
            }
            else
                dr=mijl-1;
        }

        pred[i]=poz[p];
        poz[p+1]=i;

        if(p+1>lmax)
            lmax=p+1;
    }

    int k=poz[lmax], cnt=0;

    while(k)
    {
        sol[++cnt]=v[k];
        k=pred[k];
    }

    cout<<lmax<<"\n";
    for(int i=cnt; i>=1; i--)
    {
        cout<<sol[i]<<" ";
    }

    return 0;
}