Cod sursa(job #1809785)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 19 noiembrie 2016 11:51:18
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#include <algorithm>
#define NMAX 100010
using namespace std;

int V[NMAX], D[NMAX], L[NMAX], S[NMAX];
int N, i, p, best;

int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    
    scanf("%d", &N);
    for (i = 1; i <= N; i++) {
        scanf("%d", &V[i]);
    }
    
    for (i = 1; i <= N; i++) {
        p = lower_bound(D + 1, D + best + 1, V[i]) - D;
        
        if (p == best + 1) {
            best++;
        }
        
        D[p] = V[i];
        L[i] = p;
    }
    
    p = best;
    for (i = N; i > 0; i--) {
        if (L[i] == p && (p == best || V[i] <= S[p + 1])) {
            S[p--] = V[i];
        }
    }
    
    printf("%d\n", best);
    for (i = 1; i <= best; i++) {
        printf("%d ", S[i]);
    }
    
    printf("\n");
    return 0;
}