Cod sursa(job #1848159)

Utilizator pibogaBogdan piboga Data 15 ianuarie 2017 16:11:37
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>

using namespace std;

ifstream fin ("scmax.in");
ofstream fout("scmax.out");

int v[100010],p[100010],q[100010],z[100010],y,j;
int n,i,lq,pz,s,d,m,ant;
bool scd;

void cbin()
{
    while (s<d)
    {
        m=(s+d)/2;
        if (v[i]==q[m])
        {
            pz=m;
            break;
        }
        else if (v[i]<q[m])
        {
            d=m-1;
            scd=0;
        }
        else
        {
            s=m+1;
            scd=1;
        }

    }

    if (v[i]>q[d])
    {
        pz=s;
    }
    else pz=d;
}

int main()
{
    fin >> n;
    for (i=1;i<=n;++i)
    {
        fin >> v[i];
    }
    for (i=1;i<=n;++i)
    {
        if (v[i]>q[lq])
        {
            q[++lq]=v[i];
            pz=lq;
        }
        else
        {
            s=1; d=lq;
            cbin();
        }
        q[pz]=v[i];
        p[i]=pz;
    }

    ant=n; // anterior
    for (i=lq;i>=1;i--)
    {
        for (j=ant;j>=1;--j)
        {
            if (p[j]==i)
            {
                z[++y]=j;
                ant = j;
                break;
            }

        }
    }

    fout << lq << '\n';
    for (i=y;i>=1;--i) fout << v[z[i]] <<' ';

    return 0;
}