Cod sursa(job #3367922)

Utilizator flipiiiTatucu Filip flipiii Data 12 octombrie 2026 11:43:46
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;
int n, v[100003], best[100003], p[100003], maxim, k, L[100003], nr;
void afis(int i)
{
    if (p[i] > 0)  afis(p[i]);
    cout<<v[i]<<endl;
}

int caut(int x)
{
    int p, u, m;
    p = 0; u = nr; m = (p+u)/2;
    while (p <= u)
    {
        if (v[L[m]] < x &&  v[L[m+1]] >= x) return m;
        else if (v[L[m+1]] < x) {p = m + 1; m = (p + u)/2;}
        else {u = m - 1; m = (p + u)/2;}
    }
    return nr;
}
signed main()
{
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    int poz;
    nr=1;
    for (int i=1; i<=n; i++){
        cin>>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;
    }
    maxim=0;
    poz=0;
    for (int i=1; i<=n; i++) {
        if (maxim<best[i]) {
            maxim=best[i];
            poz=i;
        }
    }
    cout<<maxim<<endl;
    afis(poz);
    return 0;
}