Cod sursa(job #2304940)

Utilizator radugnnGone Radu Mihnea radugnn Data 18 decembrie 2018 20:58:07
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N,v[100010],D[100010],T[100010],stt,dim,i;
void afisare(int pozz){
    if(T[pozz])
        afisare(T[pozz]);
    fout<<v[pozz]<<" ";

}
int cautare (int x){
    int st=1;
    int dr=dim;
    while(st<=dr){
    int mid=(st+dr)/2;
        if(v[D[mid]]<x)
            st=mid+1;
        else
            dr=mid-1;
    }
    return st;
}
int main(){
    fin>>N;
    for(i=1;i<=N;i++){
        fin>>v[i];
    }
    ///varianta n*log_n
    D[1]=1;
    dim=1;
    for(i=2;i<=N;i++){
        stt=cautare(v[i]);
        if(stt>dim)
            D[++dim]=i;
        else
            D[stt]=i;

        T[i]=D[stt-1];

    }
    //for(i=1;i<=N;i++)
     //   fout<<L[i]<<" ";
    fout<<dim<<"\n";
     afisare(D[dim]);
    return 0;
}