Pagini recente » Cod sursa (job #2662695) | Cod sursa (job #3001939) | Cod sursa (job #3241416) | Cod sursa (job #610586) | Cod sursa (job #413284)
Cod sursa(job #413284)
#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[100001],B[100001],S[100001],sol[100001];
fscanf(fin, "%ld", &n);
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);
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]);
}
return 0;
}