Pagini recente » Cod sursa (job #2197604) | Cod sursa (job #882095) | Cod sursa (job #2243958) | Cod sursa (job #856170) | Cod sursa (job #252653)
Cod sursa(job #252653)
#include <cstdio>
#define N 100001
int A[N],urm[N],M[N],n,i,j,L,maxt,pmax,step,k;
void afiseaza(int x)
{
if (urm[x]) afiseaza(urm[x]);
if (A[x]) printf("%d ",A[x]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d\n",&n);
for (i=1; i<=n; i++) scanf("%d",&A[i]);
maxt=1;
M[1]=1; L=1;
for (i=2; i<=n; i++)
{
for (step=1; step<L; step<<=1);
for (k=0; step; step>>=1)
if (k+step<=L && A[M[k+step]]<A[i])
k+=step;
k++;
L=k;
M[k]=i;
urm[i]=M[k-1];
if (L>maxt)
{
maxt=L;
pmax=i;
}
}
printf("%d\n",maxt);
afiseaza(pmax);
return 0;
}