Cod sursa(job #2648365)

Utilizator OrosIacobOros Iacob OrosIacob Data 10 septembrie 2020 13:29:24
Problema Subsir crescator maximal Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 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);
    }
}


int main() {
    citire();
    rezolvare();
    g<<vnr<<'\n';

    for(int i=1;i<=n;i++)
        if(p[i]==p[i+1]-1 || i==n)
            g<<a[i]<<" ";

    return 0;
}