Cod sursa(job #2573475)

Utilizator victorzarzuZarzu Victor victorzarzu Data 5 martie 2020 17:45:58
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

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

int a[100005];
int d[100005];
int t[100005];
int n, len, l, r, mid, pos;

void Read()
{
    f>>n;
    for(int i = 1;i <= n;++i)
        f>>a[i];
}

void recon(int i)
{
    if(t[i])
        recon(t[i]);
    g<<a[i]<<" ";
}

void Solve()
{
    len = d[1] = 1;
    for(int i = 2;i <= n;++i)
    {
        l = 1;
        r = len;

        while(l <= r)
        {
            mid = (l + r) / 2;

            if(a[d[mid]] >= a[i])
                r = mid - 1;
            else
                l = mid + 1;
        }

        pos = l;

        if(pos > len)
        {
            ++len;
            d[len] = i;
            t[d[len]] = d[pos - 1];
        }
        else
        {
            d[pos] = i;
            t[d[pos]] = d[pos - 1];
        }
    }

    g<<len<<'\n';
    recon(d[len]);
}

int main()
{
    Read();
    Solve();
    return 0;
}