Cod sursa(job #1565359)

Utilizator NastureNasture Anca Nasture Data 10 ianuarie 2016 17:46:45
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<cstdio>
#define N 100010
int l,q[N],p[N],v[N];
int caut_bin(int l1,int l2, int x){
    int poz,m;
    poz=-1;
    while(l1<=l2){
        m=(l1+l2)/2;
        if(x<=q[m]){
            poz=m;
            l2=m-1;
        }
        else
            l1=m+1;
    }
    return poz;
}
void afisare(int l,int n){
    if(l>0&&n>0)
        if(p[n]==l){
            afisare(l-1,n-1);
            printf("%d ",v[n]);

        }
        else
            afisare(l,n-1);

}
int main(){
    int n,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(i==1){
            l=1;
            q[1]=v[i];
            p[1]=1;
        }
        else{
            poz=caut_bin(1,l,v[i]);
            if(poz==-1){
                l++;
                q[l]=v[i];
                p[i]=l;
            }
            else{
                q[poz]=v[i];
                p[i]=poz;
            }
        }
    }
    printf("%d\n",l);
    afisare(l,n);

    return 0;
}