Cod sursa(job #2147012)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 28 februarie 2018 13:13:24
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

const int nmax = 100005;
int n, k, a[nmax], i, j, v[nmax];
int val[nmax], poz[nmax];

int cb(int x) {
    int st = 1, dr = k, mij;
    while (st <= dr) {
        mij = (st+dr)/2;
        if (val[mij] >= x)
            dr = mij-1;
        else st = mij+1;
    }
    return st;
}

int main() {
    f >> n;
    for (i = 1; i <= n; i++) {
        f >> a[i];
        j = cb(a[i]);
        val[j] = a[i];
        poz[i] = j;
        if (j > k) k++;
    }
    g << k << '\n';
    j = 0;
    for (i = n; i >= 1 && k; i--)
        if (poz[i] == k)
            v[++j] = a[i], k--;
    while (j > 0)
        g << v[j--] << ' ';
    return 0;
}