Cod sursa(job #739416)

Utilizator Nicusor002Telechi Nicolae Nicusor002 Data 23 aprilie 2012 00:08:37
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 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);
    return 0;
}