Pagini recente » Istoria paginii runda/oni_2010_ziua2 | Cod sursa (job #1705756) | Cod sursa (job #535790) | Cod sursa (job #767816) | Cod sursa (job #1478309)
#include <iostream>
#include <algorithm>
int i, j, size = 0, length[100005] = { 0 }, in[100005], best, trace[100005] = { -1 }, end,sol[100005];
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &size);
for (i = 0; i < size; i++) scanf("%d", &in[i]);
length[0] = 1;
for (int i = 1; i < size;i++)
{
best = 1;
for (j = i - 1; j >= 0; --j) if (in[j]<in[i] && length[j] + 1>best) best = length[j] + 1,trace[i] = j;
length[i] = best;
}
best = 0;
for (int i = 0; i < size; i++) if (length[i]>best) best = length[i], end = i;
int aux = best;
while (aux>0) sol[--aux] = in[end], end = trace[end];
printf("%d\n", best);
for (i = 0; i < best; ++i) printf("%d ", sol[i]);
}