Cod sursa(job #1528219)

Utilizator tudorgalatanRoman Tudor tudorgalatan Data 19 noiembrie 2015 11:47:48
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

#define NM 100001

using namespace std;

ifstream InF ("scmax.in");
ofstream OutF ("scmax.out");

unsigned a[NM];
unsigned n;

unsigned x[NM], t[NM];
unsigned i, j, s, p, u, m;

void afis (unsigned m);
void scan ();
void solve ();
void print ();

int main ()
{
    scan ();
    solve ();
    print ();
    return 0;
}

void display (unsigned m)
{
    if (m)
    {
        display (t[m]);
        OutF << a[m] << " ";
    }
}

void scan ()
{
    InF >> n;
    for (i=1; i<=n; i++)
        InF >> a[i];
}

void solve ()
{
    x[1] = 1;
    p = 1;
    s = 1;
    for (i=2; i<=n; i++)
    {
        p = 1;
        u = s;
        while (p <= u)
        {
            m = (u+p) / 2;
            if (a[i] > a[x[m]])
                p = m+1;
            else
                u = m-1;
        }
        if (p > s)
            s++;
        x[p] = i;
        t[i] = x[p-1];
    }
}

void print ()
{
    OutF << s << "\n";
    display (x[s]);
}