Cod sursa(job #874692)

Utilizator theo.stoicanTheodor Stoican theo.stoican Data 9 februarie 2013 10:31:18
Problema Subsir crescator maximal Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.61 kb
#include<stdio.h>
int main()
{
    int n,a[100000],b[100000],c[100000],p,q,r,l,i;
    freopen("scmax.in","rt",stdin);
    freopen("scmax.out","wt",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    l=0;
    for(i=n;i>=1;i--)
    {
        p=1;
        r=l;
        while(p<=r)
        {
            q=p+(r-p)/2;
            if(a[i]>=a[b[p]]) r=q-1;
            else p=q+1;
        }
        b[p]=i;
        if(p>l) l=p;
        c[i]=0;
        if(p>1) c[i]=b[p-1];
    }
    printf("%d\n",l);
    for(i=b[l];i;i=c[i])
        printf("%d ",a[i]);
    return 0;
}