Pagini recente » Cod sursa (job #564835) | Cod sursa (job #2932520) | Cod sursa (job #2356237) | Cod sursa (job #2434487) | Cod sursa (job #954148)
Cod sursa(job #954148)
#include <stdio.h>
#include <stdlib.h>
void read(int *n, int **numbers);
void subsir(int *numbers, const int n);
int main() {
int n, *numbers;
read(&n, &numbers);
subsir(numbers, n);
return 0;
}
void read(int *n, int **numbers) {
int i;
FILE *input;
if( (input = fopen("scmax.in", "r")) == NULL) {
perror("Nu se poate deschide fisierul ");
exit(1);
}
fscanf(input, "%d", n);
(*numbers) = (int*)calloc(*n, sizeof(int));
for(i = 0; i < *n; ++i) {
fscanf(input, "%d", (*numbers + i));
}
fclose(input);
}
void subsir(int *numbers, const int n) {
FILE *output;
if( (output = fopen("scmax.out", "r")) == NULL) {
perror("Nu se poate deschide fisierul ");
exit(1);
}
int L[n], maxim, k, i;
L[n-1] = 1;
for(k = n - 2; k >= 0; --k) {
maxim = 0;
for(i = k + 1; i < n; ++i)
if(numbers[i] > numbers[k] && L[i] > maxim)
maxim = L[i];
L[k] = 1 + maxim;
}
maxim = L[0]; i = 0;
for(k = 1; k < n; ++k)
if(L[k] > maxim) {
maxim = L[k];
i = k;
}
fprintf(output,"%d\n%d", maxim, numbers[i]);
for(k = i + 1; k < n; ++k)
if(numbers[k] > numbers[i] && L[k] == maxim - 1) {
fprintf(output," %d", numbers[k]);
--maxim;
}
}