Pagini recente » Cod sursa (job #558867) | Cod sursa (job #11932) | Cod sursa (job #1083658) | Cod sursa (job #1305861) | Cod sursa (job #1886006)
#include <stdio.h>
#define N 100005
int n,i,m;
int v[N],l[N],pos[N],sol[N];
void bs(int x, int i)
{
if(x>l[m])
{
l[++m]=x;
pos[i]=m;
}
else
{
int step=1<<17,s=0;
while(step)
{
if(s+step<=m && l[s+step]<x)
s+=step;
step/=2;
}
l[s+1]=x;
pos[i]=s+1;
}
}
int main()
{
FILE *f1,*f2;
f1=fopen("scmax.in","r");
f2=fopen("scmax.out","w");
fscanf(f1,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(f1,"%d",&v[i]);
bs(v[i],i);
}
fprintf(f2,"%d\n",m);
i=n;
while(m)
{
if(pos[i]==m)
{
m--;
sol[++sol[0]]=v[i];
}
i--;
}
for(i=sol[0];i;i--)
fprintf(f2,"%d ",sol[i]);
return 0;
}