Cod sursa(job #3349621)

Utilizator Alexutu008Ionita Alexandru-Dumitru Alexutu008 Data 1 aprilie 2026 10:26:32
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include<bits/stdc++.h>

using namespace std;

int n, a[100001];
int lis[100001], best_len[100001], k=0;

void add_to_lis(int current_index, int element){
    if(k==0) {
        lis[++k] = element;
        return;
    }

    int st=1, dr=k, poz=k+1;
    while(st<=dr){
        int middle = st+dr>>1;

        if(element <= lis[middle]){
            dr = middle - 1;
            poz = middle;
        }
        else {
            st = middle + 1;
        }
    }

    lis[poz] = element;
    if(poz == k+1) ++k;

    best_len[current_index] = k;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);

    cin>>n;
    for(int i=1;i<=n;++i){
        cin>>a[i];
        add_to_lis(i, a[i]);
    }

    cout << k << '\n';
    for(int i=1; i<=k ;++i){
        cout << lis[i] << ' ';
    }

    return 0;
}