Pagini recente » Cod sursa (job #1627732) | Cod sursa (job #863927) | Cod sursa (job #863692) | Cod sursa (job #3195852) | Cod sursa (job #430465)
Cod sursa(job #430465)
#include<stdio.h>
#define Nmax 100010
int Q[Nmax],P[Nmax],v[Nmax],N,Z;
void afis(int O)
{
char ok=1;
if(O==0)
return;
for(int i=O;i>=1&&ok;--i)
{
if(P[i]==Z)
{ ok=0;
--Z;
afis(i-1);
printf("%d ",v[i]);
}
}
}
int insert(int x)
{
long long st=1,dr=Q[0],rez=0,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(Q[mij]>=x)
{
rez=mij;
dr=mij-1;
}
else
{
st=mij+1;
}
}
if(rez)
{
Q[rez]=x;
return rez;
}
if(!rez)
{
Q[++Q[0]]=x;
return Q[0];
}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;++i)
scanf("%d",&v[i]);
for(int i=1;i<=N;++i)
{
P[i]=insert(v[i]);
}
Z=Q[0];
printf("%d\n",Q[0]);
afis(N);
return 0;
}