Cod sursa(job #803215)

Utilizator UMihneaUngureanu Mihnea UMihnea Data 27 octombrie 2012 11:09:57
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>
#include <algorithm>
#define N 100001

using namespace std;

int L,s,d,m,n,i,a[N],b[N],c[N];
void afisare(int);

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

    scanf("%d",&n);
    for(i=1;i<=n;i++)
    scanf("%d",&a[i]);
    L=0;
    for(i=1;i<=n;i++)
    {
        s=0;
        d=L+1;
        if(a[i]>a[c[L]])
        {
            L++;
            c[L]=i;
            b[i]=c[L-1];
            continue;
        }
        s=0;
        d=L;
        for(;d-s-1;)
        {
            m=(s+d)/2;
            if(a[i]>a[c[m]])
            s=m;
            else d=m;
        }
        b[i]=c[s];
        if(a[i]<a[c[d]])
        c[d]=i;

    }
    printf("%d\n",L);
    afisare(c[L]);

    return 0;
}

void afisare(int x)
{
    if(x==0)return ;
    afisare(b[x]);
    printf("%d ",a[x]);
}