Pagini recente » Cod sursa (job #2093079) | Cod sursa (job #3153946) | Cod sursa (job #739931) | Cod sursa (job #2938751) | Cod sursa (job #897340)
Cod sursa(job #897340)
#include <stdio.h>
#define MAXN 100010
int v[MAXN],prev[MAXN],bst[MAXN],n,nr,sf[MAXN];
int caut_bin(int x)
{
int p=0,u=nr,m;
m=(p+u)/2;
while(p<=u)
{
if(v[sf[m]]<x && v[sf[m+1]] >=x) return m;
else if(v[sf[m+1]]<x)
{
p=m+1;
m=(p+u)/2;
}
else
{
u=m-1;
m=(p+u)/2;
}
}
return nr;
}
void afis(int pos)
{
if(prev[pos]>0)
afis(prev[pos]);
printf("%d ",v[pos]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
int i;
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
nr=1;
bst[1]=1;
sf[1]=1;
sf[0]=0;
int pos;
for(i=2;i<=n;i++)
{
pos=caut_bin(v[i]);
prev[i]=sf[pos];
bst[i]=pos+1;
sf[pos+1]=i;
if(nr<pos+1)
nr=pos+1;
}
int maxim=0;
for(i=1;i<=n;i++)
if(maxim<bst[i])
{
maxim=bst[i];
pos=i;
}
printf("%d\n",maxim);
afis(pos);
printf("\n");
return 0;
}