Cod sursa(job #2674829)

Utilizator Mihai_EduardMihai Eduard Mihai_Eduard Data 20 noiembrie 2020 14:16:23
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <vector>
#define mx 100001

using namespace std;

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

int n, v[mx], L[mx], lmax;
vector <int> sir;

void citire()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    fin.close();
}

int bin_search(int x)
{
    if(sir.empty() or x>sir.back())
        return sir.size();
    int st=0, dr=sir.size()-1, mij;
    while(st<dr)
    {
        mij=(st+dr)/2;
        if(sir[mij]>=x)
            dr=mij;
        else
            st=mij+1;
    }
    return st;
}

void parcurgere()
{
    int poz;
    for(int i=1;i<=n;i++)
    {
        poz=bin_search(v[i]);
        if(poz==sir.size())
            sir.push_back(v[i]);
        else
            sir[poz]=v[i];
        L[i]=poz+1;
        if(L[i]>lmax)
            lmax=L[i];
    }
}

void afisare(int val, int poz)
{
    if(val!=0)
    {
        while(L[poz]!=val)
            poz--;
        afisare(val-1,poz-1);
        fout<<v[poz]<<' ';
    }
}

int main()
{
    citire();
    parcurgere();
    fout<<lmax<<endl;
    afisare(lmax,n);
    return 0;
}