Cod sursa(job #2292934)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 30 noiembrie 2018 12:00:01
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#define MAX 100004
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,V[MAX],Best[MAX],Poz[MAX],Ans[MAX],maxi=1,poz;
int s,d,mij;
int main(){
    int i,j;
    fin>>n;
    for(i=0;i<n;++i) fin>>V[i];//citim
    Best[1]=0;//! In best tin minte pozitia celui mai bun nr de pana acum, in loc nr
    for(i=1;i<n;++i){
        if(V[i]>V[Best[maxi]]){
            Poz[i]=Best[maxi];
            Best[++maxi]=i;
        }else{
            s=0;d=maxi+1;
            while(d-s>1){
                mij=(s+d)/2;
                if(V[Best[mij]]>V[i])d=mij;
                else s=mij;
            }
            if(d!=maxi+1&&V[Best[d-1]]!=V[i]){
                Poz[i]=Best[d-1];
                Best[d]=i;
            }
        }
    }
    fout<<maxi<<'\n';
    poz=Best[maxi];
    for(i=0;i<maxi;++i){
        Ans[i]=V[poz];
        poz=Poz[poz];
    }
    for(i=maxi-1;i>=0;--i)fout<<Ans[i]<<' ';
    return 0;
}