Cod sursa(job #741449)
#include <fstream>
using namespace std;
unsigned long v[100001],a[100001];
ifstream f("scmax.in");
ofstream g("scmax.out");
int main()
{
int n;
f>>n;
int i,j,max,maxi;
for(i=0;i<n;i++)
f>>v[i];
a[0]=1;
for(i=1;i<n;i++)
{
max=0;
for(j=0;j<i;j++)
{
if(a[j]>max && v[j]<v[i]) max=a[j];
}
a[i]=max+1;
}
max=1,maxi=0;
for(i=0;i<n;i++)
{
if(a[i]>max) {max=a[i]; maxi=i;}
}
g<<max<<endl;
unsigned long b[max];
int k=max;
for(i=maxi;i>=0 && max;i--)
{
if(a[i]==max)
{
max--;
b[max]=v[i];
}
}
for(i=0;i<k;i++) g<<b[i]<<' ';
}