Pagini recente » Cod sursa (job #2773998) | Cod sursa (job #2342082) | Cod sursa (job #647309) | Cod sursa (job #2589587) | Cod sursa (job #422127)
Cod sursa(job #422127)
#include<stdio.h>
int n,v[1<<17],poz[1<<17];
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)
st=m;
else
dr=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;
}