Cod sursa(job #2397479)

Utilizator Dragono63Stanciu Rares Stefan Dragono63 Data 4 aprilie 2019 14:06:04
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include<bits/stdc++.h>
using namespace std;
long long int v[100005],d[100005],pre[100005],t[100005];
int main(){

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

int n,ma=1,st=0,dr,mij;

fin>>n;

for(int i=1;i<=n;i++){
    fin>>v[i];
}
d[1]=1;
for(int i=2;i<=n;i++){
    st=0;
    dr=ma;

    while(st<=dr){
         mij=(st+dr)/2;
        if(v[d[mij]]<v[i]){
            st=mij+1;
        }
        else dr=mij-1;
    }
    d[st]=i;
    pre[i]=d[st-1];
    if(st>ma){
        ma=st;
    }
}
fout<<ma<<"\n";
int poz=d[ma];
for(int i=1;i<=ma;i++){
    t[i]=poz;
    poz=pre[poz];
}
for(int i=ma;i>=1;i--){
    fout<<v[t[i]]<<" ";
}

return 0;
}