Cod sursa(job #267899)

Utilizator cristikIvan Cristian cristik Data 28 februarie 2009 14:46:30
Problema Subsir crescator maximal Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#define INF 0x3f3f

long v[100001],p[100001],q[100001],s[100001],n,l;
long caut(long k,long i,long j)
{
    long m;
    m=(i+j)/2;
    if(i==j)
    {
        if(j>l) q[++l+1]=INF;
        q[i]=k;
        return i;
    }
    if(k<q[m]) return caut(k,i,m);
    return caut(k,m+1,j);
}
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    long i,k;
    scanf("%ld",&n);
    for(i=1; i<=n; i++) scanf("%ld",&v[i]);
    l=0; q[1]=INF;
    for(i=1; i<=n; i++)
     p[i]=caut(v[i],1,l+1);
    k=n;
    for(i=l; i; i--)
    {
        while(p[k]!=i) k--;
        s[i]=v[k];
    }
    printf("%ld\n",l);
    for(i=1; i<=l; i++)
     printf("%ld ",s[i]);
    printf("\n");
    return 0;
}