Pagini recente » Cod sursa (job #1167532) | Cod sursa (job #1925885) | Cod sursa (job #1222524) | Cod sursa (job #2966925) | Cod sursa (job #701536)
Cod sursa(job #701536)
#include<stdio.h>
#define nre 100001
long a[nre],lg[nre],maxe[nre],p[nre],af[nre],maxi,i,poz,nrsub,n,max,maxp;
long bin(long nr)
{
long x,y,m;
x=0; y=nrsub; m=(x+y)/2;
while (x<y)
{
if(a[lg[m]]<nr && a[lg[m+1]]>=nr) return m;
else if(a[lg[m]]>nr) x=m+1,m=(x+y)/2;
else y=m-1,m=(x+y)/2;
}
return nrsub;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
scanf("%ld",&a[i]);
lg[1]=1,maxe[1]=1,nrsub=1;
for(i=2;i<=n;i++)
{
poz=bin(a[i]);
lg[poz+1]=i;
maxe[i]=poz+1;
p[i]=lg[poz];
if(poz==nrsub) nrsub++;
if(maxe[i]>max)
{
max=maxe[i];
maxp=i;
}
}
printf("%ld\n",max);
maxi=max;
while(max>0)
{
af[max]=a[maxp];
maxp=p[maxp];
max--;
}
for(i=1;i<=maxi;i++) printf("%ld ",af[i]);
return 0;
}