Cod sursa(job #750687)

Utilizator test1Trying Here test1 Data 22 mai 2012 19:59:46
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
#define TEST 0

void open_file(){
    if(TEST)
    {
        freopen("test.in","r",stdin);
        freopen("test.out","w",stdout);
    } else
    {
        freopen("scmax.in","r",stdin);
        freopen("scmax.out","w",stdout);
    }
}

int v[100001],c[100001],bst[100001],n,k;

int caut_binar(int l, int r,int x){
    int md;
    while(l < r)
    {
        md = (l+r)/2;
        if( c[md] >= x ) r = md; else l = md + 1;
    }
        if( r > k )k = r;
    return r;
}

void tipar(int x,int p){
    for(int i=p; i>=0; i--)
    if( bst[i] == x && x > 0 )
    {
        tipar( x-1,i );
        printf("%d ",v[i]);
        return ;
    }
}


int main(){

    int p;

    open_file();

    scanf("%d",&n);

    for(int i=1;i<=n;i++)scanf("%d",&v[i]);

    for(int i=1;i<=n;i++)
    {
        p = caut_binar( 1, k+1, v[i] );
        c[p] = v[i];
        bst[i] = p;
    }

   // for(int i=1;i<=n;i++)printf("%d ",bst[i]);

    printf("%d\n",k);
    tipar( k,n );

    return 0;
}