Cod sursa(job #1094996)

Utilizator alex.glontGlontaru Alexandru alex.glont Data 30 ianuarie 2014 10:37:27
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<iostream>
#include<fstream>

using namespace std;

fstream in ( "scmax.in" , ios::in ),
        out( "scmax.out", ios::out);

int u[100001], v[100001], pred[100001], n, m;

int bs(int x){

    int i=0, pas = 1<<16;

    while( pas != 0 ){

        if( (i+pas<=m) && (v[u[i+pas]]<x)){

            i+=pas;
        }

        pas/=2;
    }

    return i;

}


void refac( int p ){

    if( pred[p] != 0 )
        refac( pred[ p ]);

    out << v[ p ] <<' ';

}


int main(){

    int j;

    in >>n;

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

        in >> v[i];
    }

    u[++m] = 1;

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

        j = bs( v[i] );

        if( j==m )
            ++m;

        u[j+1] = i;
        pred[i] = u[j];
    }

    out << m <<'\n';

    refac( u[m] );

    return 0;
}