Cod sursa(job #2493621)

Utilizator darksky185Alexandru Gabriel darksky185 Data 16 noiembrie 2019 16:45:40
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 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;
    }
    /*
    for(i = 2; i <= n; ++i){

        if(i-pred[i]+1 > maxx){

            maxx = i-pred[i]+1;
            st = pred[i];
            dr = i;
        }
    }
    */
    fout << l << '\n';
    /*
    for(i = 1; i <= l; ++i)
        fout << x[i] << " ";
    */
    subsir(x[l]);
    return 0;
}