Cod sursa(job #3359017)

Utilizator Zeno1789Zeno Ciuca Zeno1789 Data 22 iunie 2026 22:12:59
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

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

int v[100005],tata[100005],indici[100005],sol[100005];

int main() {
    int n;
    cin>>n;
    for (int i=1; i<=n; ++i) {
        cin>>v[i];
    }
    vector<int> minsol;
    int lmax=0;
    for (int i=1; i<=n; ++i) {
        auto it=lower_bound(minsol.begin(),minsol.end(),v[i]);
        int poz=distance(minsol.begin(),it);
        if (it==minsol.end()) {
            minsol.push_back(v[i]);
        }
        else {
            *it=v[i];
        }
        indici[poz]=i;
        if (poz>0) {
            tata[i]=indici[poz-1];
        }
        else {
            tata[i]=0;
        }
        if (poz+1>lmax) {
            lmax=poz+1;
        }
    }
    cout<<lmax<<"\n";
    int curr=indici[lmax-1],k=0;
    while (curr!=0) {
        sol[k++]=v[curr];
        curr=tata[curr];
    }
    for (int p=k-1; p>=0; --p) {
        cout<<sol[p]<<" ";
    }
    return 0;
}