Pagini recente » Cod sursa (job #1279889) | Cod sursa (job #2693277) | Cod sursa (job #1315618) | Cod sursa (job #1238848) | Cod sursa (job #263679)
Cod sursa(job #263679)
#include<stdio.h>
#define NMAX 100100
int w[NMAX],i,j,n,m,k,l,q,a,s,x[NMAX],y[NMAX],z[NMAX];
int cb(int s)
{
int in,sf,m;
in=1; sf=q;
while (in<=sf)
{
m=(in+sf)/2;
if (x[z[m]]>=s)
sf=m-1;
else
in=m+1;
}
return sf;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&x[i]);
x[0]=2000001000;
z[i]=n+1;
y[1]=1;
z[1]=1;
q=1;
for (i=2;i<=n;i++)
{
k=cb(x[i]);
if (k==0)
{
y[i]=1;
if (x[z[1]]>x[i])
z[1]=i;
}
else
{
y[i]=k+1;
if (x[z[k+1]]>x[i])
z[k+1]=i;
}
if (y[i]>q)
q=y[i];
}
printf("%d\n",q);
for (i=n;i>=1;i--)
if (y[i]==q)
{
w[++w[0]]=x[i];
q--;
}
for (i=w[0];i>=1;i--)
printf("%d ",w[i]);
printf("\n");
return 0;
}