Pagini recente » Cod sursa (job #272152) | Cod sursa (job #2777618) | Cod sursa (job #2210165) | Cod sursa (job #3148549) | Cod sursa (job #1456927)
#include <cstdio>
#include <cstdlib>
#include <cassert>
int n, *v, *l, *next, lmax, start;
int main()
{
assert(freopen("scmax.in", "r", stdin));
assert(freopen("scmax.out", "w", stdout));
assert(scanf("%d", &n));
v=(int *)malloc((n+1)*sizeof(int));
l=(int *)malloc((n+1)*sizeof(int));
next=(int *)calloc(n+1, sizeof(int));
for (int i=0;i<n;++i)
assert(scanf("%d", &v[i]));
for (int i=n;i>0;--i)
{
l[i]=1;
for (int j=i+1;j<=n;++j)
if (v[i]<v[j] && l[i]<1+l[j])
{
l[i]=l[j]+1;
next[i]=j;
}
if (lmax<l[i])
{
lmax=l[i];
start=i;
}
}
printf("%d\n", lmax);
for (int i=start;i!=0;i=next[i])
printf("%d ", v[i]);
free(v);
free(l);
free(next);
return 0;
}