Cod sursa(job #759131)

Utilizator test13test13 test13 Data 16 iunie 2012 20:46:08
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#define MAX 100001

int n,k,x[MAX],best[MAX],c[MAX];

int caut_binar(int val,int l,int r){
    int m;
  //printf("%d ",val); printf("(%d %d) ",l,r);
    //for(int i=1;i<=n;i++)printf("%d ",c[i]);printf("\n");
    while(l<r)
    {
        m=(l+r)/2;
        if(c[m]>=val) r=m; else l=m+1;
      //  printf("(%d %d) ",l,r);
    }
  //  printf("%d\n",r);
    if(r>k)c[++k]=val; else c[r]=val;
    return r;
}

void afis(int i,int k){
    for(;i>0;i--)
    if(best[i]==k)
    {
        afis(i-1,k-1);
        printf("%d ",x[i]);
        return;
    }
}

int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&x[i]);
        for(int i=1;i<=n;i++)best[i]=caut_binar(x[i],1,k+1);
       // for(int i=1;i<=n;i++)printf("%d ",best[i]);
    printf("%d\n",k);
    afis(n,k);
    return 0;
}