Cod sursa(job #2484847)

Utilizator Mada2003Madalina Scarlat Mada2003 Data 31 octombrie 2019 18:12:08
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>

using namespace std;

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

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

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";
    maxx1 = maxx;
    for(int i = n; i >=1 && maxx; i--)
    {
        if(d[i] == maxx)
        {
            rasp[maxx] = v[i];
            maxx--;
        }
    }
    for(int i = 1; i <= maxx1; i++)
    {
        cout << rasp[i] << " ";
    }
    return 0;
}