Pagini recente » Cod sursa (job #1831754) | Cod sursa (job #1268586) | Cod sursa (job #2117139) | Cod sursa (job #2176820) | Cod sursa (job #526672)
Cod sursa(job #526672)
#include<stdio.h>
#define N 100001
int n,M,st,dr,mi,a[N],x[N],y[N],P[N],L[N],i;
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
M=1;y[1]=2000000001;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]<y[1])
{
L[i]=1;
P[i]=0;
x[1]=i;
y[1]=a[i];
}
else
if(a[i]>y[M])
{
M++;
L[i]=M;
P[i]=x[M-1];
x[M]=i;
y[M]=a[i];
}
else
{
st=1;dr=M;
while(dr>st+1)
{
mi=(st+dr)/2;
if(a[i]>y[mi])st=mi;
else dr=mi;
}
if(a[i]<y[dr])
{
P[i]=P[x[dr]];
L[i]=dr;
x[dr]=a[i];
y[dr]=i;
}
}
}
for(i=M;i>=1;i--)
{
x[i-1]=P[x[i]];
y[i]=a[x[i]];
}
printf("%d\n",M);
for(i=1;i<=M;i++)
printf("%d ",y[i]);
}