Cod sursa(job #174162)

Utilizator filipbFilip Cristian Buruiana filipb Data 8 aprilie 2008 15:57:30
Problema Subsir crescator maximal Scor Ascuns
Compilator cpp Status done
Runda Marime 0.86 kb
#include <stdio.h>

int N, v[100005], P[100005], Q[100005], cnt;

int main(void)
{
    int i, l, r, m, x;
    
    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)
    {
        if (v[i] > P[cnt])
            P[++cnt] = v[i], Q[i] = cnt;
        else
        {
            for (l = 1, r = cnt, x = cnt; l <= r; )
            {
                m = (l + r) / 2;
                if (P[m] < v[i]) l=m+1;
                else x = m, r=m-1;
            }
            P[x] = v[i]; Q[i] = x;
        }
    }

    printf("%d\n", cnt);
    for (i = N, x = 0; i && cnt; --i)
        if (Q[i] == cnt)
            P[++x] = v[i], --cnt;
    for (i = x; i; --i)
        printf("%d ", P[i]);
            
    return 0;
}