Pagini recente » Cod sursa (job #494447) | Cod sursa (job #1336121) | Cod sursa (job #1842372) | Cod sursa (job #2468637) | Cod sursa (job #1255924)
#include <cstdio>
using namespace std;
int a[100004],b[100004],c[100004],d[100004],i,s,dr,nr,r,n,m,q;
int main()
{
freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
scanf ("%d", &n);
for (i=1;i<=n;i++)
scanf ("%d", &a[i]);
for (i=1;i<=n;i++)
{
s=1;
dr=nr;
while (s<=dr)
{
m=(s+dr)/2;
if (b[m]==a[i])
break;
if (b[m]<a[i])
s=m+1;
else
dr=m-1;
}
if (b[m]==a[i])
c[i]=m;
else
{
b[s]=a[i];
c[i]=s;
if (s>nr)
nr=s;
}
}
q=nr;
for (i=n;i>=1;i--)
{
if (c[i]==nr)
{
d[++r]=a[i];
nr--;
}
}
printf ("%d\n", q);
for (i=q;i>=1;i--)
printf ("%d ", d[i]);
return 0;
}