Cod sursa(job #430582)

Utilizator ZillaMathe Bogdan Zilla Data 31 martie 2010 10:25:47
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>

#define Nmax 100100

int n,p[Nmax],q[Nmax],v[Nmax];

int insert(int x)
{
    int st=1,dr=q[0],rez=0,mid;
    while(st<=dr)
        {
            mid=(st+dr)/2;
            if(q[mid]>=x)
                {
                    rez=mid;
                    dr=mid-1;
                }
            else
                st=mid+1;
        }
    if(rez)
        {
            q[rez]=x;
            return rez;
        }
    else
        {
            q[++q[0]]=x;
            return q[0];
        }
}

void afiseaza(int x,int l)
{
    int i;
    if(l==0)
        return ;
    for(i=x;i>=1;--i)
        {
            if(p[i]==l)
                {
                    afiseaza(i-1,l-1);
                    printf("%d ",v[i]);
                    return ;
                }
        }
}

int main()
{
    int i;

    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);

    scanf("%d",&n);

    for(i=1;i<=n;++i)
        scanf("%d",&v[i]);

    for(i=1;i<=n;++i)
        p[i]=insert(v[i]);

    printf("%d\n",q[0]);

	afiseaza(n,q[0]);

    return 0;
}