Pagini recente » Cod sursa (job #2730758) | Cod sursa (job #1092781) | Cod sursa (job #648272) | Cod sursa (job #2094399) | Cod sursa (job #1426763)
// i origins
#include <iostream>
#include <cstdio>
#include <cstring>
#define NMAX 100000
using namespace std;
int n, a[NMAX], lungime_maxima[NMAX];
void determinare() {
for(int i = 0; i < n; i++) {
lungime_maxima[i] = 1;
for(int j = i-1; j >= 0; j--) {
if(a[j] < a[i] && lungime_maxima[i] < lungime_maxima[j]+1) {
lungime_maxima[i] = lungime_maxima[j] + 1;
}
}
}
}
int maxim() {
int maxim = -1, pos = -1;
for(int i = 0; i < n; i++)
if(lungime_maxima[i] > maxim) {
maxim = lungime_maxima[i];
pos = i;
}
printf("%d\n", maxim);
return pos;
}
void drum(int pos) {
for(int j = pos-1; j >= 0; j--)
if(lungime_maxima[pos] == lungime_maxima[j]+1 && a[pos] > a[j]) {
pos = j;
drum(pos);
printf("%d ", a[pos]);
break;
}
}
int main()
{
freopen("scmax.in", "r", stdin);
//freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
determinare();
int pos_maxim = maxim();
drum(pos_maxim);
printf("%d ", a[pos_maxim]);
return 0;
}