Pagini recente » Cod sursa (job #291755) | Cod sursa (job #921956) | Cod sursa (job #438075) | Cod sursa (job #441103) | Cod sursa (job #2626969)
#include <stdio.h>
#include <stdlib.h>
int main(){
int n, a[100000], max, start;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
int *D = malloc(n * sizeof(int));
for(int i = 0; i < n; i++){
max = 0;
for(int j = 0; j < i; j++)
if(a[j] < a[i] && D[j] > max) max = D[j];
D[i] = max + 1;
}
max = 0;
for(int i = 0; i < n; i++)
if(D[i] > max){
max = D[i];
start = i;
}
int size = max;
int *ans = malloc(max * sizeof(int));
ans[--max] = a[start];
while(max){
for(int i = 0; i < start; i++)
if(D[i] == D[start] - 1 && a[i] <= a[start]){
ans[--max] = a[i];
start = i;
break;
}
}
for(int i = 0; i < size; i++)
printf("%d ", ans[i]);
}