Cod sursa(job #3301955)

Utilizator horatiu.avramAvram Popa Cristian Horatiu horatiu.avram Data 1 iulie 2025 17:49:59
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;
#define MAXN (int)1e5
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[MAXN+1],val[MAXN+1],pr[MAXN+1];
int main() {
    vector<int>sol;
    int n,sz=0;
    fin>>n;
    val[0]=INT_MIN;
    for(int i=1; i<=n; i++) {
        fin>>val[i];
        if(val[i]>val[v[sz]]) {
            v[++sz]=i;
            pr[i]=v[sz-1];
        } else {
            int st=1,dr=sz,mij,ind=-1;
            while(st<=dr) {
                mij=(st+dr)/2;
                if(val[v[mij]]>=val[i]) {
                    dr=mij-1;
                    ind=mij;
                } else {
                    st=mij+1;
                }
            }
            if(ind>=0) {
                v[ind]=i;
                pr[i]=v[ind-1];
            }
        }
    }
    fout<<sz<<'\n';
    int nr=v[sz];
    while(nr) {
        sol.push_back(val[nr]);
        nr=pr[nr];
    }
    reverse(sol.begin(),sol.end());
    for(int i=0; i<(int)sol.size(); i++) {
        fout<<sol[i]<<' ';
    }
    return 0;
}