Cod sursa(job #1891063)

Utilizator matystroiaStroia Matei matystroia Data 23 februarie 2017 18:36:03
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <cmath>
using namespace std;

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

const int N = 100000;

int n, v[N], p[N], m[N], lmax;

int bs(int x, int lo, int hi)
{
    while(lo<=hi)
    {
        int mid = ceil((lo+hi)/2);
        if(v[m[mid]]<x)
            lo = mid+1;
        else
            hi = mid-1;
    }

    return lo;
}

void afis(int i)
{
    if(p[i]!=-1) afis(p[i]);
    fout<<v[i]<<" ";
}

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

    m[0]=-1;

    for(int i=0;i<n;i++)
    {
        int l = bs(v[i], 1, lmax);
        p[i] = m[l-1];
        m[l] = i;

        lmax = max(lmax, l);
    }

    fout<<lmax<<'\n';
    afis(m[lmax]);

    return 0;
}