Pagini recente » Cod sursa (job #3197747) | Cod sursa (job #2283922) | Cod sursa (job #1400473) | Cod sursa (job #2096792) | Cod sursa (job #1414358)
#include <stdio.h>
#include <algorithm>
using namespace std;
int n,u,i,l[100001],p[100001],a[100001],x,t,sol[100001];
int *j;
int main()
{
freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
scanf("%i",&n);
for (i=1;i<=n;i++) scanf("%i",&a[i]);
l[++u]=a[1]; p[1]=1;
for (i=2;i<=n;i++)
{
j=lower_bound(l+1,l+u+1,a[i]);
if (j==l+u+1)
{
l[++u]=a[i];
p[i]=u;
}
else
{
x=distance(l,j);
l[x]=a[i];
p[i]=x;
}
}
printf("%i\n",u);
x=n;
for (i=u;i>0;i--)
{
while (p[x]!=i)
x--;
sol[++t]=a[x];
}
for (i=t;i>0;i--) printf("%i ",sol[i]);
fclose(stdin);
fclose(stdout);
return 0;
}