Cod sursa(job #1751198)

Utilizator daymon_cDumitru Chitoraga daymon_c Data 31 august 2016 22:05:29
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
#define NMAX 100005

int smax, a[NMAX], v[NMAX], pos[NMAX], n;

int bsearch(int x)
{
   int N=1, i;
   while(N<=smax) N<<=1;

   for(i=0;i<=smax && N;N>>=1)
       if(i+N<=smax && x>v[i+N])
           i+=N;

    return i;
}

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]);

    int p = 0;
    v[1] = a[1];
    pos[1] = 1;
    smax = 1;
    for(int i=2; i<=n; ++i)
    {
        p = bsearch(a[i]);
        v[p+1] = a[i];
        pos[p+1] = i;
        if(p+1>smax)
            smax = p+1;
    }

    printf("%d\n", smax);

    for(int i=1;i<=smax;i++)
        printf("%d ", a[pos[i]]);

    return 0;
}