Cod sursa(job #1464919)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 26 iulie 2015 00:02:43
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<cstdio>
int v[100010],best[100003],urm[100003],maxim=1,L[100003],sol[100010];
int bin_search(int x){
    int l1=0,l2=maxim,m;
    while(l1<=l2){
        m=(l1+l2)/2;
        if(v[L[m]]<x&&v[L[m+1]]>=x)
            return m;
        else
            if(v[L[m+1]]<x)
                l1=m+1;
            else
                l2=m-1;
    }
    return maxim;
}
int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int i,j,poz,n,p;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    best[1]=L[1]=1;
    for(i=2;i<=n;i++){
        p=bin_search(v[i]);
        urm[i]=L[p];
        best[i]=p+1;
        L[p+1]=i;
        if(maxim<p+1){
            maxim=p+1;
            poz=i;
        }
    }
    printf("%d\n",maxim);
    for(i=maxim;i>=1;i--){
        sol[i]=v[poz];
        poz=urm[poz];
    }
    for(i=1;i<=maxim;i++)
        printf("%d ",sol[i]);
    return 0;
}