Cod sursa(job #1292978)

Utilizator irinaneaguIrina Neagu irinaneagu Data 15 decembrie 2014 08:24:52
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<cstdio>
int v[100001],pred[100001],u[100001],m;
int cautb(int x){
    int i=0,pas=1<<16;
    while(pas!=0){
        if(i+pas<=m&&v[u[i+pas]]<x)
            i+=pas;
        pas/=2;
        }
    return i;
    }

void subsir(int p){
    if(pred[p]!=0)
        subsir(pred[p]);
    printf("%d ",v[p]);
    }

int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    m=1;
    u[m]=1;
    pred[1]=0;
    for(i=2;i<=n;i++){
        j=cautb(v[i]);
        pred[i]=u[j];
        u[j+1]=i;
        if(j==m)
            m++;
        }
    printf("%d\n",m);
    subsir(u[m]);
    return 0;
}