Cod sursa(job #1413401)

Utilizator Ionut228Ionut Calofir Ionut228 Data 1 aprilie 2015 20:47:02
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int N, M;
int V[100005], sol[100005], TT[100005];

int cb(int x)
{
    int lt = 0, rt = M + 1;
    while (rt - lt > 1)
    {
        int mid = (lt + rt) / 2;
        if (V[sol[mid]] <= x)
            lt = mid;
        else
            rt = mid;
    }
    if (V[sol[lt]] == x)
        return lt - 1;
    return lt;
}

void afis(int pos)
{
    if (pos == 0)
        return;
    afis(TT[pos]);

    fout << V[pos] << ' ';
}

int main()
{
    fin >> N;
    for (int i = 1; i <= N; ++i)
        fin >> V[i];
    for (int i = 1; i <= N; ++i)
    {
        int pos = cb(V[i]);

        ++pos;
        sol[pos] = i;
        TT[i] = sol[pos - 1];

        M = max(M, pos);
    }

    fout << M << '\n';
    afis(sol[M]);

    fin.close();
    fout.close();
    return 0;
}