Pagini recente » Cod sursa (job #2380010) | Cod sursa (job #413279) | Cod sursa (job #2508672) | Cod sursa (job #3169132) | Cod sursa (job #413278)
Cod sursa(job #413278)
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE * fin = fopen("scmax", "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 = (int*) malloc(sub_count * sizeof(int));
i = IND;
while (i != -1) {
sol[k] = nr[i];
k++;
i = S[i];
}
for (i = k - 1; i >= 0; i--) {
printf("%ld ", sol[i]);
fprintf(fout, "%ld ", sol[i]);
}
return 0;
}