Cod sursa(job #2493624)

Utilizator iuliiaiulia scarlat iuliia Data 16 noiembrie 2019 16:57:50
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int v[100001], x[100001], pred[100001];

int n, l;

int cautb(int val)
{

    if(val > v[x[l]])
        return l+1;

    int st = 1, dr = l, m;
    while(st < dr)
    {
        m = (st+dr)/2;
        if(v[x[m]] >= val)
            dr = m;
        else
            st = m + 1;
    }
    return st;

}

void subsir(int p)

{
    if (p == 0)
    {
        return;
    }
    subsir(pred[p]);
    fout << v[p] << ' ';

}

int main()
{

    int i, j, maxx = 0, st, dr;
    fin >> n;
    for(i = 1; i <= n; ++i)

        fin >> v[i];

    x[++l] = 1;
    for(i = 2; i <= n; ++i)
    {

        j = cautb(v[i]);
        pred[i] = x[j - 1];
        if(j > l)
            l = j;
        x[j] = i;

    }


    fout << l << '\n';

    subsir(x[l]);

    return 0;

}