Cod sursa(job #2203939)

Utilizator danielsociuSociu Daniel danielsociu Data 13 mai 2018 19:19:29
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
#define mx 100050

int A[mx], Q[mx], P[mx], N, len;

int InsertVal(int k, int st, int dr){
    int md=(st+dr)/2;
    if(st==dr){
        if(st>len) Q[++len+1]=mx;
        Q[st]=k;
        return st;
    }
    else if(k<=Q[md]) InsertVal(k,st,md);
         else InsertVal(k,md+1,dr);
}
void crearePQ(){
    len =0;
    for(int i=1;i<=N;i++){
        P[i]=InsertVal(A[i],1,len+1);
    }
}

int afis(){
    cout<<len<<endl;
    int i=N;
    while(len){
        if(P[i]==len){
            cout<<A[i]<<" ";
            len--;
        }
        i--;
    }
}

int main(){
    cin>>N;
    for(int i=1;i<=N;i++)
        cin>>A[i];
    crearePQ();
    afis();
}