Pagini recente » Cod sursa (job #2265451) | Cod sursa (job #1880081) | Cod sursa (job #775703) | Cod sursa (job #2502465) | Cod sursa (job #513162)
Cod sursa(job #513162)
#include<stdio.h>
#include<stdlib.h>
int v[200000],q[200000],p[200000],m,n,i,k,j,s[200000];
int srch(int x)
{
int j,st,dr;
st=0;dr=m;
while(st!=dr)
{
j=(st+dr)/2;
if(q[j]<x)st=j+1;
else dr=j;
}
return st;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d",&v[i]);
q[0]=v[0];
p[0]=0;
m=0;
for(i=1;i<n;i++)
{
if(q[m]<v[i]){q[++m]=v[i];p[i]=m;continue;}
j=srch(v[i]);
q[j]=v[i];
p[i]=j;
}
printf("%d\n",m+1);
j=n;i=m;k=m;
while(i>=0)
{
while(p[j]!=i)j--;
s[k--]=v[j];
i--;
}
for(i=0;i<=m;i++)printf("%d ",s[i]);
printf("\n");
return 0;
}