Pagini recente » Cod sursa (job #433324) | Cod sursa (job #2778646) | Cod sursa (job #1686778) | Cod sursa (job #315656) | Cod sursa (job #1264356)
#include <stdio.h>
long int a[100000],b[100000],c[100000];
int n,k,m;
int cautare(int x)
{
if(!m)
{
m++;
return 0;
}
if(a[x]>a[b[m-1]])
{
m++;
return m-1;
}
int i,step;
for(step=1;step<m;step<<=1);
for(i=m-1;step;step>>=1)
if(i-step>=0 && a[b[i-step]]>a[x])
i-=step;
return i;
}
void afisare(int q, int w)
{
if(q+1)
{
afisare(q-1,c[w]);
printf("%d ", a[w]);
}
}
int main()
{
int i;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(i=0;i<n;i++)
{
scanf("%d", &a[i]);
k=cautare(i);
b[k]=i;
c[i]=b[k-1];
}
printf("%d\n", m);
/* for(i=0;i<m;i++)
{
printf("%d ", a[n]);
n=c[n];
}*/
afisare(m-1,b[m-1]);
return 0;
}