Cod sursa(job #2648370)

Utilizator OrosIacobOros Iacob OrosIacob Data 10 septembrie 2020 13:37:50
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, a[100005],v[100005],p[100005],vnr;
int cb(int st, int dr, int n)
{
    int mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if (v[mij]<n)
            st=mij+1;
        else
            dr=mij-1;
    }
    return st;
}
void citire()
{
    f>>n;
    for (int i = 1; i <= n; ++i)
        f>>a[i];
}
void rezolvare()
{
    for(int i=1;i<=n;i++)
    {
        int x=cb(1,vnr,a[i]);
        p[i]=x;
        v[p[i]]=a[i];
        vnr=max(p[i],vnr);
    }
}

  void afisare(int nr, int poz)
{
    if (nr == 0)
        return;
    for (int i = poz;; i--)
        if (p[i] == nr)
        {
            afisare(nr - 1, i - 1);
            g << a[i] << ' ';
            return;
        }
}

int main() {
    citire();
    rezolvare();
    g<<vnr<<'\n';
    afisare(vnr,n);
    return 0;
}