Pagini recente » Cod sursa (job #1884854) | Cod sursa (job #908657) | Cod sursa (job #2967012) | Cod sursa (job #703561) | Cod sursa (job #422131)
Cod sursa(job #422131)
#include<stdio.h>
int n,v[100010],poz[100010];
int main()
{
int i,st,dr,m,j;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d\n",&v[i]);
for (i=1;i<=n;++i)
if (v[i]>=poz[poz[0]])
poz[++poz[0]]=v[i];
else
{
st=1;
dr=poz[0];
while(st+2<dr)
{
m=(st+dr)/2;
if (v[m]>=st)
dr=m;
else
st=m;
}
for (j=st-2;j<=dr+2;++j)
if (poz[j-1]<=v[i] && v[i]<=poz[j+1])
poz[j]=v[i];
}
printf("%d\n",poz[0]);
for (i=1;i<=poz[0];++i)
printf("%d ",poz[i]);
return 0;
}