Cod sursa(job #1152442)

Utilizator japjappedulapPotra Vlad japjappedulap Data 24 martie 2014 18:48:19
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
using namespace std;

ifstream is ("scmax.in");
ofstream os ("scmax.out");

int n;
int v[100001];
int D[100001], BS[100001], Best;

void SCMAX();
int OPTIMAL(int x);

int main()
{
    is >> n;
    for (int i = 1; i <= n; ++i)
        is >> v[i];
    SCMAX();

    is.close();
    os.close();
    return 0;
}

void SCMAX()
{
    for (int i = 1; i <= n; ++i)
        D[i] = OPTIMAL(v[i]);
    os << Best << '\n';
    for (int i = 1; i <= Best; ++i)
        os << BS[i] << ' ';
};

int OPTIMAL(int x)
{
    int l = 1, r = Best, m;
    if (BS[Best] < x) { ++Best; BS[Best] = x; return Best;}
    while (l <= r)
    {
        m = (l + r)/2;
        if (BS[m] <= x) l = m+1;
        if (BS[m] > x) r = m-1;
    }
    BS[m] = x;
    return m;
};