Cod sursa(job #808841)

Utilizator Nicusor002Telechi Nicolae Nicusor002 Data 7 noiembrie 2012 14:46:14
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
#define dim 100005
int n,v[dim],sol[dim],bst[dim];

void print(int max,int n){
    while(bst[n]!=max) n--;
    if(max>1)
        print(max-1,n-1);
    printf("%d ",v[n]);
    return;
}

int main(){
    int i,poz;
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&v[i]);
        if(sol[sol[0]]<v[i]){
            sol[++sol[0]]=v[i];
            bst[i]=sol[0];
        }else{
            poz=lower_bound(sol+1,sol+sol[0]+1,v[i])-sol;
            sol[poz]=v[i];
            bst[i]=poz;
        }
    }
    printf("%d\n",sol[0]);
    print(sol[0],n);
    /*
    printf("\n");
    for(i=1;i<=sol[0];i++)
        printf("%d ",sol[i]);
    */
    return 0;
}