Pagini recente » Cod sursa (job #1577261) | Cod sursa (job #1074449) | Cod sursa (job #1832536) | Cod sursa (job #2335263) | Cod sursa (job #552892)
Cod sursa(job #552892)
#include <cstdio>
#define N 100003
inline int max(int a, int b) { return (a > b ? a : b); }
inline int ab(int a) { return (a >=0 ? a : -a); }
int v[N],l[N],d[N],bf[N];
int main()
{
int n,i,j,lmx=1,dif=0,poz;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
{
scanf("%d",&v[i]);
l[i]=1;
for (j=1;j<i;++j)
if ((v[j]<v[i]) && (l[j]+1>=l[i]))
{
if (l[j]+1>l[i])
l[i]=l[j]+1,d[i]=max(d[j],ab(v[i]-v[j])),bf[i]=j; else
if ((l[j]+1==l[i]) && (d[i]>max(d[j],ab(v[i]-v[j]))))
d[i]=max(d[j],ab(v[i]-v[j])),bf[i]=j;
}
if (l[i]>lmx)
lmx=l[i],dif=d[i],poz=i; else
if ((l[i]==lmx) && (dif>d[i])) dif=d[i],poz=i;
}
printf("%d\n",lmx);
for (i=lmx;i;--i)
l[i]=poz,poz=bf[poz];
for (i=1;i<=lmx;++i) printf("%d ",v[l[i]]);
return 0;
}