Pagini recente » Cod sursa (job #3364007) | Cod sursa (job #3363458) | Cod sursa (job #3363294) | Cod sursa (job #3364017) | Cod sursa (job #3364191)
#include<bits/stdc++.h>
using namespace std;
const int NMAX = 1e5 + 10;
int lis[NMAX], v[NMAX];
int pre[NMAX];
void reconstruct_array(int current_position) {
int aux[NMAX];
int n = lis[current_position];
int i = n - 1;
do {
aux[i--] = v[current_position];
current_position = pre[current_position];
}while (current_position != -1);
for (i = 0; i < n; i++) printf("%d ", aux[i]);
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n; scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &v[i]);
}
for (int i = 1; i <= n; i++) {
int best_j = i;
for (int j = 1; j < i; j++) {
if (v[j] < v[i] && lis[j] > lis[best_j])
best_j = j;
}
lis[i] = lis[best_j] + 1;
pre[i] = (best_j != i ? best_j : -1);
}
int best_index = 0;
for (int i = 1; i <= n; i++) {
if (lis[i] > lis[best_index])
best_index = i;
}
printf("%d\n", lis[best_index]);
reconstruct_array(best_index);
return 0;
}