Cod sursa(job #2135022)

Utilizator Andrei17Andrei Pascu Andrei17 Data 18 februarie 2018 15:34:07
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>

using namespace std;

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

const int N = 100000;

int n, v[N], lung[N], pred[N], vf, poz;

int cautbin(int i) {
    int r = 0, pas = 1 << 28;

    while (pas != 0) {
        if (r + pas <= vf && v[lung[r + pas]] < v[i]) {
            r += pas;
        }
        pas >>= 1;
    }

    return r;
}

void rec(int i) {
    if (pred[i] != 0) rec(pred[i]);
    out << v[i] << ' ';
}

int main()
{
    in >> n;
    for (int i = 1; i <= n; i++) in >> v[i];

    for (int i = 1; i <= n; i++) {
        int k = cautbin(i);
        if (k == vf) {
            vf++;
            poz = i;
        }
        lung[k + 1] = i;
        pred[i] = lung[k];
    }
    out << vf << '\n';
    rec(poz);
}