Pagini recente » Cod sursa (job #775732) | Cod sursa (job #1166312) | Cod sursa (job #1641590) | Cod sursa (job #3243392) | Cod sursa (job #899210)
Cod sursa(job #899210)
#include<stdio.h>
int a[100010],b[100010],s[100010],N,k=1;
int caut(int x)
{
int st=1;
int dr=k;
int ret=1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(b[mij]>=x)
{
ret=mij;
dr=mij-1;
}
else
st=mij+1;
}
return ret;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;++i)
scanf("%d",&a[i]);
s[1]=1;
b[1]=a[1];
for(int i=2;i<=N;++i)
{
if(a[i]>b[k])
{
++k;
s[i]=k;
b[k]=a[i];
}
else
{
s[i]=caut(a[i]);
b[k]=a[i];
}
}
printf("%d\n",k);
int x=k;
for(int i=N;i>=1;--i)
{
if(s[i]==k)
{
b[k]=a[i];
--k;
}
}
for(int i=1;i<=x;++i)
printf("%d ",b[i]);
return 0;
}