Cod sursa(job #2965298)

Utilizator DobraVictorDobra Victor Ioan DobraVictor Data 14 ianuarie 2023 19:31:44
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <limits.h>

const int32_t MAX_N = 100000;

uint32_t v[MAX_N], len[MAX_N], pos[MAX_N];
int main() {
    FILE* fin = fopen("scmax.in", "r");
    FILE* fout = fopen("scmax.out", "w");

    uint32_t n;
    fscanf(fin, "%u", &n);

    for(uint32_t i = 0; i != n; ++i)
        fscanf(fin, "%u", v + i);

    uint32_t max = 0, start = n;

    for(uint32_t i = n - 1; i != UINT_MAX; --i) {
        len[i] = 1;
        pos[i] = n;

        if(len[i] > max) {
            max = len[i];
            start = i;
        }

        for(uint32_t j = i + 1; j != n; ++j) {
            if(v[i] < v[j] && len[i] < len[j] + 1) {
                len[i] = len[j] + 1;
                pos[i] = j;

                if(len[i] > max) {
                    max = len[i];
                    start = i;
                }
            }
        }
    }

    fprintf(fout, "%u\n", max);

    uint32_t i = start;
    while(i != n) {
        fprintf(fout, "%u ", v[i]);
        i = pos[i];
    }

    fclose(fin);
    fclose(fout);

    return 0;
}