Cod sursa(job #2100353)

Utilizator AndreiTurcasTurcas Andrei AndreiTurcas Data 5 ianuarie 2018 15:44:58
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <fstream>
#define mx 100005
using namespace std;

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

int v[mx], d[mx], t[mx], n, Lm, k;

void Subseq(int x)
{
    if(x != 0)
    {
        Subseq(t[x]);
        g << v[x] << " ";
    }
}

int main()
{
    d[1] = 1; k = 1;
    f >> n;
    for(int i = 1; i <= n; ++i)
        f >> v[i];
    for(int i = 2; i <= n; ++i)
    {
        int p, step;
        for(step = 1; step < k; step <<= 1);
        for(p = 0; step; step >>= 1)
            if(p+step <= k && v[d[p+step]] < v[i])
                p += step;
        ++p;
        if(p > k) k++;
        d[p] = i;
        t[i] = d[p-1];
    }
    g << k << "\n";
    Subseq(d[k]);
}