Pagini recente » Cod sursa (job #3139905) | Cod sursa (job #1461741) | Cod sursa (job #896186) | Cod sursa (job #3231454) | Cod sursa (job #513231)
Cod sursa(job #513231)
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
int max,maxx,a[100000],b[100000],c[100000],m,i,j,n,nr,q,sol[100000];
int search(int st,int dr,int x)
{
if (st==dr) return st;
m=(st+dr)/2;
if (x>b[m]) return search(m+1,dr,x);
else return search(st,m,x);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(b,sizeof(b),0);
memset(c,sizeof(c),0);
max=0;
for (i=1;i<=n;i++)
{
q=1;
q=search(1,max+1,a[i]);
b[q]=a[i];
c[i]=q;
if (q>max) max=q;
}
sol[max+1]=2000000001;
maxx=max;
printf("%d\n",max);
for (i=n;i>=1;i--)
if (c[i]==max&&a[i]<sol[max+1])
{
sol[max]=a[i];
max--;
}
for (i=1;i<=maxx;i++)
printf("%d ",sol[i]);
printf("\n");
return 0;
}