Cod sursa(job #701560)
#include<stdio.h>
using namespace std;
int n,x[100001],lung[100001],pred[100001];
int pozmax()
{
int i,pm=1;
for(i=2 ; i<=n ; i++)
if(lung[i]>lung[pm])
pm = i;
return pm;
}
void subsir(int p)
{
if(pred[p]!=0) subsir(pred[p]);
printf("%d ",x[p]);
}
void scrie(int v[100001])
{
for(int i=1 ; i<=n ; i++)
printf("%d ",v[i]);
printf("\n");
}
int main()
{
int i,j;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d ",&n);
for(i=1;i<=n;i++)
scanf("%d ",&x[i]);
lung[1]=1;
pred[1]=0;
for(i=2;i<=n;i++)
{
lung[i]=0; pred[i]=0;
for(j=1;j<i;j++)
{
if(x[j]>=x[i]) continue;
if(lung[i]<lung[j])
{
lung[i]=lung[j];
pred[i]=j;
}
}
lung[i]++;
}
//scrie(lung);
//scrie(pred);
int p = pozmax();
printf("%d\n",lung[p]);
subsir(p);
}