Cod sursa(job #1097895)

Utilizator remus88Neatu Remus Mihai remus88 Data 4 februarie 2014 10:14:28
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
/* Subsir crescator maximal folosind cautare binara + o coada */
#include <stdio.h>
#define MAX 100001

int N, V[MAX], Bst[MAX], C[MAX], K = 0;

int CautBin(int X)
{
    int Left = 1, Right = K + 1, Middle;
    while (Right - Left > 1)
    {
        Middle = (Left + Right) / 2;
        if (C[Middle] <= X) Left = Middle; else Right = Middle;
    }
    if (C[Left] < X) Left = Right;
    if (Left > K) K = Left;
    C[Left] = X;
    return Left;
}

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d", &N);
    for (int i = 1; i <= N; i++)
    {
        scanf("%d", &V[i]);
        Bst[i] = CautBin(V[i]);
    }
    printf("%d\n", K);
    for (int i = N, j = K; i > 0; i--)
    {
        if (Bst[i] == j)
        {
            C[j--] = V[i];
        }
    }
    for (int i = 1; i <= K; i++) printf("%d ", C[i]);
}