Cod sursa(job #2259540)

Utilizator 24601Dan Ban 24601 Data 13 octombrie 2018 14:11:57
Problema Subsir crescator maximal Scor 60
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <string.h>

#define NMAX 100000

static int num[NMAX], seq[NMAX], sol[NMAX];

int main(void)
{
    int n, i, seq_len, j;

    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);

    scanf("%d", &n);

    seq_len = 0;

    for (i = 0; i < n; i++) {
        scanf("%d", &num[i]);

        if (num[i] < seq[0] || i == 0) {
            seq[0] = num[i];

            if (seq_len == 0) {
                seq_len = 1;
            }

            continue;
        }

        for (j = seq_len - 1; j >= 0; j--) {
            if (seq[j] < num[i]) {
                if (seq[j + 1] > num[i] || j + 1 == seq_len) {
                    seq[j + 1] = num[i];
                    if (j == seq_len - 1) {
                        seq_len++;
                        memcpy(sol, seq, seq_len * sizeof seq[0]);
                    }

                    break;
                }
            }
        }
    }

    printf("%d\n", seq_len);
    for (i = 0; i < seq_len; i++) {
        printf("%d%c", sol[i], " \n"[i == seq_len - 1]);
    }

    return 0;
}