Cod sursa(job #3286587)

Utilizator mariusharabariMarius Harabari mariusharabari Data 14 martie 2025 13:36:41
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;

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

int n;

int main(){
    ios::sync_with_stdio(0);
    fin.tie(nullptr);

    fin>>n;
    vector <int> v(n);
    for(int i=0;i<n;i++)
        fin>>v[i];

    vector <int> parent(n,-1), index(n,-1);
    vector <int> d(n+1,INT_MAX);
    d[0]=INT_MIN;

    for(int i=0;i<n;i++){
        int l=upper_bound(d.begin(), d.end(), v[i]) - d.begin();
        if(d[l-1]<v[i]&&d[l]>v[i]){
            d[l]=v[i];
            index[l]=i;
            if(l>0)
                parent[i]=index[l-1];
        }
    }

    int dmax, p;
    for(int i=n;i>0;i--){
        if(d[i]!=INT_MAX){
            dmax=i;
            p=index[i];
            break;
        }
    }

    fout<<dmax<<endl;
    vector <int> rez;
    while(p!=-1){
        //cout<<p<<' '<<v[p]<<' '<<parent[p]<<endl;
        rez.push_back(v[p]);
        p=parent[p];
    }
    for(int i=rez.size()-1;i>=0;i--)
        fout<<rez[i]<<' ';
    return 0;
}