Cod sursa(job #2484841)

Utilizator Mada2003Madalina Scarlat Mada2003 Data 31 octombrie 2019 17:59:42
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>

using namespace std;

ifstream cin("scmax.in");
ofstream cout("scmax.out");

long long b, v[100005], n, k, d[100005], maxx, l, pozitie[100005], rasp[100005];

int bs(int x, int dr)
{
    int st = 1, r = 0, mij;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(v[pozitie[mij]] < x)
        {
            st = mij + 1;
            r = mij;
        }
        else
        {
            dr = mij - 1;
        }
    }
    return r;
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> v[i];
        b = bs(v[i], l);
        d[i] = b + 1;
        if(b + 1 > l)
            l = b + 1;
        pozitie[b + 1] = i;
        if(d[i] > maxx)
        {
            maxx = d[i];
        }
    }
    cout << maxx << "\n";
    for(int i = n; i >=1 && maxx; i--)
    {
        if(d[i] == maxx)
        {
            rasp[maxx] = v[i];
            maxx--;
        }
    }
    for(int i = 1; i <= maxx; i++)
    {
        cout << rasp[i] << " ";
    }
    return 0;
}