Cod sursa(job #2591400)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 30 martie 2020 14:01:09
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <stdio.h>

using namespace std;

const int NMAX = 100005;
int v[NMAX], pmin[NMAX], pred[NMAX];
int n, m;

int caut_bin(int val) {
    int pas, p;
    pas = 1 << 16;
    p = 0;
    while (pas > 0) {
        if (p + pas <= m && v[pmin[p + pas]] < val)
            p += pas;
        pas /= 2;
    }
    return p;
}

void afisare(int p) {
    if (pred[p] != 0)
        afisare(pred[p]);
    printf ("%d ", v[p]);
}

int main() {

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

    int i, p;

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

    pmin[++m] = 1;
    for (i = 2; i <= n; i++) {
        p = caut_bin(v[i]);
        pmin[p + 1] = i;
        pred[i] = pmin[p];
        if (p == m)
            m++;
    }

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

    afisare(pmin[m]);

    return 0;
}