Pagini recente » Cod sursa (job #2478522) | Cod sursa (job #3139349) | Cod sursa (job #615587) | Cod sursa (job #2999763) | Cod sursa (job #314654)
Cod sursa(job #314654)
#include <stdio.h>
#define MaxN 100009
int a[MaxN],best[MaxN],p[MaxN],L[MaxN],k,max,nr,poz,n;
void cit()
{
int i;
freopen("scmax.in","r",stdin);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
}
int caut(int x)
{
int st=0,dr=nr,m=(st+dr)/2;
while(st<=dr)
{
if(a[L[m]]< x && a[L[m+1]]>=x)
return m;
else
if(a[L[m+1]]<x)
{
st=m+1;
m=(st+dr)/2;
}
else
{
dr=m-1;
m=(st+dr)/2;
}
}
return nr;
}
void rez()
{
int i;
for(i=1;i<=n;i++)
{
poz=caut(a[i]);
p[i]=L[poz];
best[i]=poz+1;
L[poz+1]=i;
if(nr<poz+1)
nr=poz+1;
}
}
void maxim()
{
int i;
poz=0;
for(i=1;i<=n;i++)
if(max<best[i])
{
max=best[i];
poz=i;
}
}
void afis(int i)
{
if(p[i]>0)
afis(p[i]);
printf("%d ",a[i]);
}
int main()
{
cit();
freopen("scmax.out","w",stdout);
rez();
maxim();
printf("%d\n",max);
afis(poz);
return 0;
}