Pagini recente » Cod sursa (job #2801356) | Cod sursa (job #907602) | Cod sursa (job #1994608) | Cod sursa (job #2888235) | Cod sursa (job #1627130)
#include <stdio.h>
FILE *f1,*f2;
long x,v[100002],i,n,q,li,ls,m,c[100002];
unsigned l[100002],gasit;
void afis(long n,long i)
{
if(n==0)
return;
for(long cop=i;v[cop]!=n-1;cop--)
if(l[cop]==n-1)
{
afis(n-1,cop);
break;
}
fprintf(f2,"%ld ",c[i]);
}
int main()
{
f1=fopen("scmax.in","r");
f2=fopen("scmax.out","w");
fscanf(f1,"%ld",&n);
for(i=1,q=0;i<=n;i++)
{
fscanf(f1,"%ld",&c[i]);
x=c[i];
li=1;ls=q;gasit=0;
if(x>v[q])
{
v[++q]=x;
l[i]=q;
}
else
while(li<=ls && !gasit)
{
m=(li+ls)/2;
if(v[m-1]<x && x<=v[m])
{
v[m]=x;
l[i]=m;
gasit=1;
}
else if(x<v[m])
ls=m-1;
else
li=m+1;
}
}
long max=0,pmax;
for(i=1;i<=n;i++)
if(l[i]>=max)
{
max=l[i];
pmax=i;
}
fprintf(f2,"%ld\n",max);
afis(max,pmax);
return 0;
}