Pagini recente » Cod sursa (job #1553053) | Cod sursa (job #486246) | Cod sursa (job #2534880) | Cod sursa (job #1765074) | Cod sursa (job #1255929)
#include <cstdio>
#define N 100003
using namespace std;
int l[N],a[N],q[N],Max,i,n,pz;
inline int binary(int x)
{
int st=1,dr=q[0],mj;
pz=0;
while(st<=dr)
{
mj=(st+dr)/2;
if(q[mj]>=x) {dr=mj-1;pz=mj;}
else st=mj+1;
}
if(pz)
return pz;
q[0]++;
return q[0];
}
inline void sol(int x)
{
if(x==0) return;
if(l[x]==Max)
{
--Max;
sol(x-1);
printf("%d ",a[x]);
}
else sol(x-1);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
q[0]=0;
for(i=1;i<=n;++i)
{
scanf("%d",&a[i]);
pz=binary(a[i]);
q[pz]=a[i];
l[i]=pz;
if(pz>Max) Max=pz;
}
printf("%d\n",Max);
sol(n);
printf("\n");
return 0;
}