Cod sursa(job #1255934)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 5 noiembrie 2014 16:32:37
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>

using namespace std;

int v[100010], st[100010], sol[100010];

void bin (int x, int i)
{
    int a = 1, b = st[0];
    while (a <= b)
    {
        int m = (a + b) >> 1;
        if (x == st[m])
        {
            a = m;
            break;
        }

        else if (x < st[m]) b = m - 1;
        else if (x > st[m]) a = m + 1;
    }

    if (a > st[0]) st[++st[0]] = x, sol[i] = a;
    else st[a] = x, sol[i] = a;
}

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

    int n;
    scanf ("%d", &n);

    for (int i = 1; i <= n; ++i)
    {
        scanf ("%d", &v[i]);

        if (i == 1) st[++st[0]] = v[i], sol[i] = 1;
        else bin (v[i], i);
    }

    int k = 0;
    for (int i = n; i; --i)
        if (sol[i] == st[0]) st[++k] = v[i], --st[0];

    printf ("%d\n", k);
    for (int i = k; i; --i)
        printf ("%d ", st[i]);

    printf ("\n");

    return 0;
}