Cod sursa(job #3290165)

Utilizator parrot279Sofi Tudose parrot279 Data 29 martie 2025 14:12:08
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");

int parinte[100001], best[100001], lmax = 0, v[100001];

int cautare(int i);

void afisare(int i);

int main()
{
    int n;
    cin>>n;
    for(int i = 1; i <= n; ++i)
    {
        cin>>v[i];
        int l = cautare(i);
        best[l+1] = i;
        parinte[i] = best[l];
        lmax = max(lmax, l+1);
    }
    cout<<lmax<<"\n";

    afisare(best[lmax]);
    return 0;
}


void afisare(int i)
{
    if(i != 0)
    {
        afisare(parinte[i]);
        cout<<v[i]<<" ";
    }


}
int cautare(int i)
{
    int st = 0, dr = lmax, rez = 0;
    while(st <= dr)
    {
        int mijl = (st + dr) / 2;
        if(v[best[mijl]] < v[i])
        {
            st = mijl + 1;
            rez = mijl;
        }
        else
        {

            dr = mijl - 1;
        }
    }
    return rez;
}