Cod sursa(job #1896782)

Utilizator denniscrevusDennis Curti denniscrevus Data 28 februarie 2017 21:42:46
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#define NMAX 100003

using namespace std;

int v[NMAX], p[NMAX], sol[NMAX], i, n, cnt, poz, aux, cnt1, ans[NMAX];

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

int cautbin(int a)
{
    int step = 1;
    int start = 0;

    for(; step<cnt; step<<=1);

    for(;step;step>>=1)
    {
        int index = start + step;

        if(index > cnt)
            continue;

        if(sol[index] < a)
            start = index;
    }

    return start;
}

int main()
{
    f>>n;

    for(i=1;i<=n;i++)
        f>>v[i];

    p[1] = cnt = 1;
    sol[1] = v[1];

    for(i=2;i<=n;i++)
    {
        poz = cautbin(v[i]) + 1;

        if(poz > cnt)
            cnt++;

        sol[poz] = v[i];
        p[i] = poz;
    }

    g<<cnt<<"\n";
    aux = cnt;

    for(i=n; i>=1; i--)
    {
        if(p[i] == aux)
        {
            ans[++cnt1] = sol[aux];
            aux--;
        }
    }

    for(i=cnt1; i>=1; i--)
        g<<ans[i]<<" ";

}