Cod sursa(job #2949735)

Utilizator nicuhasCemartan Nicolae nicuhas Data 1 decembrie 2022 15:45:32
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
const int NMAX=1e5;
using namespace std;
int v[NMAX+1],rez[NMAX+1],poz[NMAX+1],retur[NMAX+1];
int main(){
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");
    int i,n,k=1,st,dr,mijl,max1=0,cmax1=0;
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>v[i];
    }
    for(i=1;i<=n;i++){
        st=1;
        dr=k;
        while(st<=dr){
            mijl=(st+dr)/2;
            if(rez[mijl]<v[i]){
                st=mijl+1;
            }
            else{
                dr=mijl-1;
            }
        }
        rez[st]=v[i];
        poz[i]=st-1;
        k=max(k,st);
        //cout<<poz[i]<<" ";
        max1=max(max1,poz[i]);
    }
    fout<<max1<<"\n";
    for(i=n;i>=1;i--){
        if(poz[i]==max1){
            cmax1=max1;
            while(cmax1>0){
                while(poz[i]!=cmax1){
                    i--;
                }
                retur[cmax1]=v[i];
                cmax1--;
            }
        }
    }
    for(i=1;i<=max1;i++){
        fout<<retur[i]<<" ";
    }
    return 0;
}