Cod sursa(job #1685932)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 11 aprilie 2016 22:26:01
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

using namespace std;

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

int a[100004], b[100004], c[100004];
int rez[100004];
int n, i, j, k, st, dr, m;

int main()
{
    f >> n;
    for (i = 1; i <= n; i++)
        f >> a[i];
    for (i = 1; i <= n; i++)
        if (a[i] > b[k])
            b[++k] = a[i], c[i] = k;
        else
        {
            st = 1, dr = k;
            while (st <= dr)
            {
                m = (st+dr)/2;
                if (a[i] > b[m])
                    st = m+1;
                else
                    dr = m-1;
            }
            if (st > k)
                k++;
            b[st] = a[i];
            c[i] = st;
        }
    g << k << '\n';
    for (i = n; i >= 1; i--)
        if (c[i] == k)
            j++, rez[j] = a[i], k--;
    for (i = j; i >= 1; i--)
        g << rez[i] << ' ';
    return 0;
}