Pagini recente » Cod sursa (job #1098414) | Cod sursa (job #1244286) | Cod sursa (job #561467) | Cod sursa (job #1855598) | Cod sursa (job #509059)
Cod sursa(job #509059)
# include <stdio.h>
int a[101000],q[101000],p[100100],d[100100],n,nr,i,m;
void caut (int x, int st, int dr, int j)
{
int poz=0;
while (st<=dr && poz==0)
{
m=(st+dr)/2;
if (q[m-1]<=x && q[m]>x)
{
poz=m;
q[poz]=x;
p[i]=poz;
}
else if (q[m-1]>x)
dr=m-1;
else if (q[m]<=x)
st=m+1;
}
}
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]);
if (a[i]>q[q[0]])
{
q[++q[0]]=a[i];
p[i]=q[0];
}
else caut (a[i],1,q[0],i);
}
printf ("%d\n",q[0]);
nr=q[0];
for (i=n; i>=1; i--)
{
if (p[i]==nr)
{
d[++d[0]]=a[i];
nr--;
}
}
for (i=d[0]; i>=1; i--)
printf ("%d ",d[i]);
printf ("\n");
return 0;
}