Pagini recente » Cod sursa (job #2504332) | Cod sursa (job #2537605) | Cod sursa (job #927002) | Cod sursa (job #2658471) | Cod sursa (job #575218)
Cod sursa(job #575218)
#include <stdio.h>
#define N 100005
int stack[N];
int sir[N];
int cnt[N];
int prev[N];
int main ()
{ freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int i,n,m,j;
scanf("%d\n",&n);
for (i=1;i<=n;i++)
{ scanf("%d",&sir[i]);
}
cnt[1]=1;
prev[1]=1;
m=1;
for (i=2;i<=n;i++)
{ for (j=m;j>=1;j--)
{
if(sir[i]>sir[cnt[j]])
{ prev[i]=cnt[j];
break;
}
}
if(j==0)
{ cnt[1]=i;
prev[i]=0;
}
else
{ if(j+1>m)
{ m=j+1;
cnt[j+1]=i;
}
else if(sir[cnt[j+1]]>sir[i])
{ cnt[j+1]=i;
}
}
}
printf("%d\n",m);
j=0;
for (i=cnt[m];i!=0;i=prev[i])
{ stack[j]=sir[i];
j++;
}
j--;
while(j!=-1)
{ printf("%d ",stack[j]);
j--;
}
return 0;
}