Cod sursa(job #1539313)

Utilizator OFY4Ahmed Hamza Aydin OFY4 Data 30 noiembrie 2015 17:45:59
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
#include<stdlib.h>

#define nMax 100005
#define nrMax 2000000005

using namespace std;

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

int n,v[nMax],p[nMax],q[nMax],lungimeV,*S[nMax];

void citire(){

    in>>n;

    for(int i=0;i<n;++i){

        in>>v[i];
    }
}

int insrt(int k,int l, int h){

    int m=(l+h)/2;

    if(l==h){

        if(h>lungimeV) q[++lungimeV+1]=nrMax;
        q[l]=k;
    }
    else if(k<q[m]) return insrt(k,l,h);
    else return insrt(k,m+1,h);
}

void biuldPQ(void){

    lungimeV=0;q[1]=nrMax;

    for(int i=1;i<n;++i){

        p[i]=insrt(v[i],1,lungimeV+1);
    }
}

void biuldS(void){

    int k=n;
    S=malloc(sizeof(*S));

    for(int i=lungimeV;i;--i){

        while(p[k]!=i)--k;
        (*S)[i]=v[k];
    }
}

void afisare(void){

    out<<lungimeV<<endl;

    for(int i=1;i<=lungimeV;++i)out<<(*S)[i]<<" ";
}

int main(){

    citire();
    biuldPQ();
    biuldS();
    afisare();
}