Cod sursa(job #3366489)

Utilizator rapidu36Victor Manz rapidu36 Data 2 octombrie 2026 08:26:05
Problema Subsir crescator maximal Scor 70
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <endian.h>
#include <stdio.h>

#define N 100000

const int INF = 2e9 + 1;

int v[N], lung[N];

int max(int x, int y) {
    return (x > y ? x : y);
}

void refac_subsirul(FILE *fout, int poz, int lungime, int val) {
    if (lungime == 0) {
        return;
    }
    if (v[poz] < val && lung[poz] == lungime) {
        refac_subsirul(fout, poz - 1, lungime - 1, v[poz]);
        fprintf(fout, "%d ", v[poz]);
    } else {
        refac_subsirul(fout, poz - 1, lungime, val);
    }
}

int main(void) {
    FILE *fin = fopen("scmax.in", "r");
    int n;
    fscanf(fin, "%d", &n);
    int p_lung_max = 0;
    for (int i = 0; i < n; i++) {
        fscanf(fin, "%d", &v[i]);
        int max_lung_i = 0;
        for (int j = 0; j < i; j++) {
            if (v[j] < v[i]) {
                max_lung_i = max(max_lung_i, lung[j]);
            }
        }
        lung[i] = 1 + max_lung_i;
        if (lung[i] > lung[p_lung_max]) {
            p_lung_max = i;
        }
    }
    fclose(fin);
    FILE *fout = fopen("scmax.out", "w");
    fprintf(fout, "%d\n", lung[p_lung_max]);
    refac_subsirul(fout, p_lung_max, lung[p_lung_max], INF);
    fprintf(fout, "\n");
    fclose(fout);
    return 0;
}