Pagini recente » Cod sursa (job #228135) | Cod sursa (job #495702) | Cod sursa (job #2165225) | Cod sursa (job #1339569) | Cod sursa (job #2199081)
#include <stdio.h>
int n,a[100001],b[100001],l[100001],m,ant[100001];
FILE *f,*g;
int cauta(int x)
{
int opt=0,mij,st,dr;
st=1;dr=m;
while(st<=dr)
{
mij=st+(dr-st)/2;
if(x>a[b[mij]])
{
opt=mij;
st=mij+1;
}
else
dr=mij-1;
}
return opt+1;
}
void smax()
{
int i,crt;
m=1;b[1]=1;ant[1]=0;l[1]=1;
for(i=1;i<=n;i++)
{
crt=cauta(a[i]);
l[i]=crt;
if(crt>m)
m=crt;
b[crt]=i;
ant[i]=b[crt-1];
}
}
void scrie(int i)
{
if(ant[i]>0)
scrie(ant[i]);
fprintf(g,"%d ",a[i]);
}
int main()
{
int i;
f=fopen("scmax.in","r");
g=fopen("scmax.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&a[i]);
smax();
fprintf(g,"%d\n",m);
scrie(b[m]);
}