Cod sursa(job #2457282)

Utilizator YouDontNeedMyNameJurcut Paul YouDontNeedMyName Data 17 septembrie 2019 08:35:57
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;
int n,v[100005],b[100005],poz[100005];
ifstream in("scmax.in");
ofstream out("scmax.out");
int caut(int st, int dr, int val)
{
    while(st<dr)
    {
        int mi = dr-(dr-st)/2;
        if(v[b[mi]]>=val)
            dr=mi-1;
        else
            st=mi;
    }
    return st;
}
void afis(int nod)
{
    if(nod == 0) return;
    afis(poz[nod]);
    out << v[nod] << ' ';
}
int main()
{
    in >> n;
    for(int i=1; i<=n; i++)
    {
        in >> v[i];
    }
    int o=0;
    for(int i=1; i<=n; i++)
    {
        int k = caut(0,o,v[i]);
        if(k==o)
        {
            o++;
            poz[i] = b[k];
            b[o] = i;
        }
        else if(v[b[k+1]]>v[i])
        {
            b[k+1] = i;
            poz[i] = b[k];
        }
    }
    out << o << '\n';
    afis(b[o]);
    return 0;
}