Cod sursa(job #1391712)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 18 martie 2015 09:29:56
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
int n;
int a[100001],best[100001],m[100001],p[100001],af[100001];
void afis(int pos)
{
     if(pos!=1&&p[m[pos]]!=0) afis(p[pos]);
     printf("%d ",a[m[pos]]);
}
int main()
{
    freopen ("scmax.in","r",stdin);
    freopen ("scmax.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    best[1]=1;
    m[1]=1;
    int l=1;
    a[0]=2000000001;
    for(int i=2;i<=n;i++)
    {
            int s=1,e=l;
            while(s<=e)
            {
                       int mij=(s+e)/2;
                       if(a[m[mij]]<a[i]) s=mij+1;
                       else e=mij-1;
            }
            if(l<s) l=s;
            if(a[m[s]]>a[i]) m[s]=i;
            p[i]=m[s-1];
    }
    printf("%d\n",l);
    int ltmp=l;
    l=m[l];
    for(int i=ltmp;i>=1;i--)
    {
            af[i]=a[l];
            l=p[l];
    }
    for(int i=1;i<=ltmp;i++) printf("%d ",af[i]);
}