Pagini recente » Cod sursa (job #2913256) | Cod sursa (job #1150357) | Cod sursa (job #312234) | Cod sursa (job #383308) | Cod sursa (job #501274)
Cod sursa(job #501274)
#include<stdio.h>
#include<string.h>
int i,j,n,rez, v[100001],l[100001],max,x,sf,max1,sol[100010],rec[100010],st,dr,poz[100001],pc;
int cautbin(int st,int dr,int x)
{
int m, sol1;
while(st<=dr)
{
m=(st+dr)/2;
if(l[m]<x)
{
sol1=m;
st=m+1;
}else
{
dr=m-1;
}
}
return sol1;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
l[0]=-2000000001;
rez=0;
for(i=1;i<=n;i++)
{
max=cautbin(0,rez,v[i]);
l[max+1]=v[i];
if(max+1>rez)
rez=max+1;
poz[max+1]=i;
sol[i]=poz[max];
}
printf("%d\n",rez);
rec[rez]=l[rez];
pc=poz[rez];
for(i=rez-1;i>=1;i--)
{
pc=sol[pc];
rec[i]=v[pc];
}
for(i=1;i<=rez;i++)
printf("%d ",rec[i]);
}