Pagini recente » Cod sursa (job #2672842) | Cod sursa (job #1700254)
#include <stdio.h>
int v[100000],a[100000],poz[100000];
int cbin(int e,int n)
{
int i=0,j=n,mij;
while(i<=j)
{
mij=(i+j)/2;
if(e<a[mij])
j=mij-1;
else
if(e>a[mij])
i=mij+1;
else
return mij;
}
if(e<a[0])
return 0;
return mij+1;
}
int main()
{
FILE *fin,*fout;
fin=fopen("scmax.in","r");
fout=fopen("scmax.out","w");
int n,i,lung,p,j;
fscanf(fin,"%d",&n);
for(i=0;i<n;i++)
fscanf(fin,"%d",&v[i]);
a[0]=v[0];
lung=poz[0]=0;
for(i=1;i<n;i++)
{
p=cbin(v[i],lung);
a[p]=v[i];
poz[i]=p;
if(p>lung)
lung=p;
}
fprintf(fout,"%d\n",lung+1);
j=n-1;
while(j>=0 && poz[j]!=lung)
j--;
a[lung]=v[j];
for(i=lung-1;i>=0;i--)
{
j--;
while(j>=0 && poz[j]!=i)
j--;
a[i]=v[j];
}
for(i=0;i<=lung;i++)
fprintf(fout,"%d ",a[i]);
fclose(fin);
fclose(fout);
return 0;
}