Pagini recente » Cod sursa (job #301894) | Cod sursa (job #1584912) | Cod sursa (job #3281037) | Cod sursa (job #1680477) | Cod sursa (job #1757238)
#include <stdio.h>
#define min(a,b) ((a)<(b) ? (a):(b))
int n,d[100009],a[100009],i,j,k,p,sol[100009],id[100009];
FILE *in , * out;
int s(int x)
{
int pp=p,i=0;
while (pp)
{
if (i+pp<n && d[i+pp]<x) i+=pp;
pp/=2;
}
return i;
}
void sh(int i)
{
if (i!=-1)
{
sh(sol[i]);
fprintf(out,"%d ",a[i]);
}
}
int main()
{
in = fopen("scmax.in","r");
out= fopen("scmax.out","w");
fscanf(in,"%d",&n);
for (p=1;p<n;p*=2) ;
for (i=0;i<n;++i)
fscanf(in,"%d",a+i);
for (i=1;i<=n;++i) d[i]=2000000009;
d[0]=-1;
id[0]=-1;
for (i=0;i<n;++i)
{
k=s(a[i]);
if (d[k+1]>a[i])
{
id[k+1]=i;
d[k+1]=a[i];
}
sol[i]=id[k];
}
for (i=n;d[i]==2000000009;--i) ;
fprintf(out,"%d\n",i);
sh(id[i]);
fclose(in);
fclose(out);
return 0;
}