Pagini recente » Cod sursa (job #2227914) | Cod sursa (job #92948) | Cod sursa (job #627570) | Cod sursa (job #1941336) | Cod sursa (job #383798)
Cod sursa(job #383798)
#include<cstdio>
const int N = 100000;
//const unsigned int NN=(unsigned int)1<<31;
int v[N],x[N],pred[N],n,m,fin[N];
int caut(int val)
{
int i;
unsigned int step=1;
for (step = 1; step < m; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step <= m && v[x[i + step]] < val)
i += step;
++i;
return i;
}
void sir(int poz)
{
if(poz)
{
sir(pred[poz]);
printf("%d ",v[poz]);
}
}
int main()
{
int i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
x[1]=1;
pred[1]=0;
m=1;
for(i=2;i<=n;++i)
{
int j=caut(v[i]);
if(j > m)
++m;
x[j]=i;
pred[i]=x[j-1];
}
printf("%d\n",m);
sir(x[m]);
/*
fin[m]=x[m];
//for(i=m-1;i>=1;--i)
while()
fin[i]=v[pred[i+1]];
printf("%d\n",m);
for(i=1;i<=m;++i)
printf("%d ",fin[i]);
*/
return 0;
}