Cod sursa(job #3038388)

Utilizator carinamariaCarina Maria Viespescu carinamaria Data 27 martie 2023 12:22:57
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int i, j, n, m, poz, st, dr, mid, L, k;
int v[100002], w[100002], t[100002], d[100002];
int main() {
    cin>>n;
    for(i=1;i<=n;i++){
        cin>>v[i];
    }
    for(i=1;i<=n;i++){
        if(v[i]>v[d[L]]){
            d[++L]=i;
            t[d[L]]=d[L-1];
        }
        else{
            st=1;
            dr=L;
            while(st<=dr){
                mid=(st+dr)/2;
                if(v[d[mid]]<v[i])
                    st=mid+1;
                else
                    dr=mid-1;
            }
            //dr;
            d[dr+1]=i;
            t[d[dr+1]]=d[dr];
        }
    }
    cout<<L<<"\n";
    poz=d[L];
    while(poz){
        w[++k]=v[poz];
        poz=t[poz];
    }
    reverse(w+1, w+k+1);
    for(i=1;i<=k;i++)
        cout<<w[i]<<" ";


}