Cod sursa(job #1339147)

Utilizator Edsger.DijkstraEdsger Wybe Dijkstra Edsger.Dijkstra Data 10 februarie 2015 18:26:49
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int MAXN = 100010;

int V[MAXN];
int Best[MAXN], H[MAXN];
int T[MAXN];

void Afisare (int X)
{
    if (X){
        Afisare (T[X]);
        out << V[X]<< " ";
    }
}

int main()
{
    int N, i;
    int L = 0;
    int now, step, logN;

    in >> N;
    for (i = 1; i <= N; i ++)
        in >> V[i];

    for (logN = 1; logN < N; logN <<= 1);

    for (i = 1; i <= N; i ++){
        now = 0;

        for (step = logN; step; step >>= 1)
            if (now + step <= L && V[ H[now + step] ] < V[i])
                now += step;

        Best[i] = Best[ H[now] ] + 1;
        T[i] = H[now];

        if (now == L)
            H[++ L] = i;
        else
            if (V[ H[now + 1] ] > V[i])
                H[now + 1] = i;
    }

    out << L << "\n";

    for (i = 1; i <= N; i ++)
        if (Best[i] == L){
            Afisare (i);
            return 0;
        }

    return 0;
}