Pagini recente » Cod sursa (job #1953505) | Cod sursa (job #2727303) | Cod sursa (job #2662655) | Cod sursa (job #2862704) | Cod sursa (job #413282)
Cod sursa(job #413282)
#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE * fin = fopen("scmax.in", "r");
FILE * fout = fopen("scmax.out", "w");
long int n, i, j, sub_count = 0, IND = 0, k = 0;
long int *nr, *B, *S;
fscanf(fin, "%ld", &n);
nr = (long int*) malloc(n * sizeof(long int));
B = (long int*) malloc(n * sizeof(long int));
S = (long int*) malloc(n * sizeof(long int));
for (i = 0; i < n; i++) {
fscanf(fin, "%ld", &nr[i]);
}
for (i = 0; i < n; i++) {
B[i] = 1;
S[i] = -1;
if (nr[i] > IND) {
IND = i;
}
for (j = i - 1; j >= 0; j--) {
if (nr[j] < nr[i] && B[j] >= B[i]) {
B[i] = B[j] + 1;
S[i] = j;
}
}
if (B[i] > sub_count) {
sub_count = B[i];
}
}
fprintf(fout, "%ld\n", sub_count);
long int* sol = (long int*) malloc(sub_count * sizeof(long int));
i = IND;
while (i != -1) {
sol[k] = nr[i];
k++;
i = S[i];
}
for (i = k - 1; i >= 0; i--) {
fprintf(fout, "%ld ", sol[i]);
}
free(nr);
free(B);
free(S);
return 0;
}