Pagini recente » Borderou de evaluare (job #3366814) | Borderou de evaluare (job #3367500) | Monitorul de evaluare | Borderou de evaluare (job #3366507) | Cod sursa (job #3366489)
#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;
}