Pagini recente » Cod sursa (job #665901) | Cod sursa (job #331402) | Cod sursa (job #16662) | Cod sursa (job #1101180) | Cod sursa (job #1042530)
#include <stdio.h>
using namespace std;
FILE *f,*g;
int n,i,poz;
long long l[100004],a[100009];
long long max1;
void recur (int i,int sum)
{ int j;
if (sum>1) for (j=i;j>=1;j--)
{
if (sum==l[j]+1 && a[j]<a[i+1])
{recur (j-1,l[j]);
fprintf (g,"%d ",a[j]);
break;}
}
}
int main()
{f=fopen ("scmax.in","r");
g=fopen ("scmax.out","w");
int j;
fscanf (f,"%d",&n);
for (i=1;i<=n;i++)
fscanf (f,"%d",&a[i]);
for (i=1;i<=n;i++)
{ max1=0;
for (j=i-1;j>=1;j--)
{
if (a[j]<a[i] && (l[j]+1>l[i] || l[i]==0) && a[j]>max1)
{
l[i]=l[j]+1;
}
if (a[j]<a[i] && a[j]>max1) max1=a[j];
}
if (l[i]==0)
{
l[i]=1;
}
}
max1=0;
for (i=n;i>=1;i--)
{
if ( l[i]>max1)
{
poz=i;
max1=l[i];
}
}
fprintf (g,"%d\n",max1);
recur (poz-1,max1);
fprintf (g,"%d ",a[poz]);
return 0;
}