Cod sursa(job #694031)
#include<stdio.h>
using namespace std;
int main ()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,a[100002],best[100002],p[100002],i,j,max,e=0,k;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=n;i>0;i--){
max=0;
for(j=i;j<=n;j++)
if(a[i]<a[j]&&max<best[j])
max=j;
if(max!=0){
best[i]=best[max]+1;
p[i]=max;}
else{
best[i]=1;
p[i]=-1;}
if(e<best[i]){
k=i;
e=best[i];}}
printf("%d\n",e);
while(p[k]!=-1){
printf("%d ",a[k]);
k=p[k];}
printf("%d ",a[k]);
return 0;
}