Pagini recente » Cod sursa (job #2645848) | Cod sursa (job #1757263) | Cod sursa (job #427747) | Cod sursa (job #2918966) | Cod sursa (job #588940)
Cod sursa(job #588940)
#include <stdio.h>
FILE *f,*s;
int i,j,k,l,m,n;
int v1[100005],v2[100005],v3[100005],v4[100005];
int main()
{
f=fopen("scmax.in","r");
s=fopen("scmax.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&v1[i]);
l=1;
v2[1]=1;
v3[1]=1;
for(i=1;i<=n;i++)
{
int st=1;
int dr=l;
while(st<=dr)
{
int mij=(st+dr)/2;
if(v1[i]>v1[v3[mij]])
st=mij+1;
else
dr=mij-1;
}
if(st<=l)
{
v3[st]=i;
v2[i]=l;
}
else
{
l++;
v3[l]=i;
v2[i]=l;
}
}
int max=0;
for(i=1;i<=n;i++)
{
if(v2[i]>v2[max])
max=i;
}
fprintf(s,"%d\n",v2[max]);
i=v2[max];
k=v2[max];
l=0;
for(i=n;i>=1;i--)
{
if(k==v2[i] && v1[i]<v4[l])
{
v4[++l]=v1[i];
k--;
}
}
for(i=l;i>=1;i--)
fprintf(s,"%d ",v4[i]);
fclose(s);
return 0;
}