Cod sursa(job #979009)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 31 iulie 2013 08:50:27
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <algorithm>

using namespace std;

int v[100010], poz[100010], st[100010], a[100010], lst;

int bin (int x)
{
    int a = 1, b = lst, m;

    while (1)
    {
        if (a <= b)
        {
            m = (a + b) / 2;
            if (st[m] == x) return m;
            else if (st[m] < x) a = m + 1;
            else b = m - 1;
        }

        else return a;
    }
}

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

    int n;
    f >> n;

    for (int i = 1; i <= n; i++)
    {
        f >> v[i];
        int b = bin (v[i]);
        st[b] = v[i];
        poz[i] = b;
        lst = max (lst, b);
    }

    g << lst << '\n';

    int k = 0;
    for (int i = n; lst; i--)
        if (poz[i] == lst) a[++k] = v[i], lst--;

    for (int i = k; i; i--)
        g << a[i] << " ";

    g << '\n';

    return 0;
}