Pagini recente » Cod sursa (job #3252421) | Cod sursa (job #3270046) | Cod sursa (job #1585025) | Cod sursa (job #1628625) | Cod sursa (job #863657)
Cod sursa(job #863657)
#include <iostream>
#include <stdio.h>
using namespace std;
FILE *f=fopen("scmax.in","r");
FILE *g=fopen("scmax.out","w");
int mxx,nr,i,n,a[100000],c[100000],mx,k,j,s[100000];
void drum(int k)
{
int j;
for(j=k;j>=1;j--)
if(s[j]==mxx)
{
if(mxx>1)
{
mxx--;
drum(j);
}
break;
}
fprintf(g,"%d ",a[j]);
}
int cauta(int nr)
{
int p,m,u,mx;
mx=0;
p=1;
u=c[0];
while (p<=u)
{
m=(p+u)/2;
if(c[m]<nr)
{
if(m>mx)mx=m;
p=m+1;
} else u=m-1;
}
return mx;
}
int main()
{
mxx=0;
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&a[i]);
c[0]=1;
c[1]=a[1];
//a[1]=1;
for (i=2;i<=n;i++)
{
nr=cauta(a[i]);
if(nr==c[0])
{
c[0]++;
c[nr+1]=a[i];
} else c[nr+1]=a[i];
s[i]=nr+1;
if (s[i]>mxx) {mxx=s[i];k=i;};
}
fprintf(g,"%d\n",mxx);
i=0;
drum(k);
fclose(g);
return 0;
}