Pagini recente » Cod sursa (job #1111322) | Cod sursa (job #548506) | Cod sursa (job #3166659) | Cod sursa (job #1969688) | Cod sursa (job #759808)
Cod sursa(job #759808)
#include <stdio.h>
#include <stdlib.h>
void print_rev(int *v, int *pred, int i, FILE *g) {
if (pred[i] == i) {
fprintf(g, "%d ", v[i]);
return;
}
print_rev(v, pred, pred[i], g);
fprintf(g, "%d ", v[i]);
return;
}
int main() {
FILE *f = fopen("scmax.in", "r");
FILE *g = fopen("scmax.out", "w");
int n;
int *v;
int *max, *pred;
fscanf(f, "%d", &n);
v = (int *) malloc(sizeof(int) * n);
max = (int *) malloc(sizeof(int) * n);
pred = (int *) malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) {
fscanf(f, "%d", &v[i]);
}
max[0] = 1;
for (int i = 0; i < n; i++) {
int best = 1, cur = i;
for (int j = 0; j < i; j++) {
if (v[j] < v[i] && max[j] + 1 > best) {
cur = j;
best = max[j] + 1;
}
}
pred[i] = cur;
max[i] = best;
}
int best = max[0];
int stop;
for (int i = 1; i < n; i++) {
if (best < max[i]) {
best = max[i];
stop = i;
}
}
fprintf(g, "%d\n", best);
print_rev(v, pred, stop, g);
fclose(f);
fclose(g);
}