Pagini recente » Cod sursa (job #837877) | Cod sursa (job #454343) | Cod sursa (job #159151) | Cod sursa (job #1749952) | Cod sursa (job #526675)
Cod sursa(job #526675)
#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]=i;
y[dr]=a[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]);
}