Pagini recente » Cod sursa (job #1973606) | Cod sursa (job #2120550) | Cod sursa (job #2540753) | Cod sursa (job #677194) | Cod sursa (job #176213)
Cod sursa(job #176213)
#include<stdio.h>
#define MAXN 100001
int i,nr,n,poz,max,pozitie;
int a[MAXN],b[MAXN],l[MAXN],p[MAXN];
void afis(int poz)
{
if(poz)
{
afis(p[poz]);
printf("%d ",a[poz]);
}
}
int cauta(int x)
{
int m,li=0,ls=nr;
while(li<=ls)
{
m=(li+ls)/2;
if(a[l[m]]<x&&a[l[m+1]]>=x)
return m;
else
if(a[l[m+1]]<x)
li=m+1;
else
ls=m-1;
}
return nr;
}
int main(void)
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
l[1]=1;
b[1]=1;
nr=1;
for(i=2;i<=n;i++)
{
poz=cauta(a[i]);
p[i]=l[poz];
l[poz+1]=i;
b[i]=poz+1;
if(nr<=poz)
nr=poz+1;
if(b[i]>max)
{
max=b[i];
pozitie=i;
}
}
printf("%d\n",max);
afis(pozitie);
return 0;
}