Pagini recente » Cod sursa (job #436410) | Cod sursa (job #2113462) | Cod sursa (job #2463099) | Cod sursa (job #2638369) | Cod sursa (job #710208)
Cod sursa(job #710208)
#include<cstdio>
using namespace std;
int n,nr;
int v[100010],x[100010],pred[100010];
void read()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
int i;
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
}
int cautbin(int val)
{
int i,pas=1<<16;
for(i=0;pas;pas/=2)
if(i+pas<=nr && v[x[i+pas]]<val)
i+=pas;
return i+1;
}
void refac(int p)
{
if(pred[p])
refac(pred[p]);
printf("%d ",v[p]);
}
void rez()
{
int i,j;
x[++nr]=1;
pred[1]=0;
for(i=2;i<=n;i++)
{
j=cautbin(v[i]);
x[j]=i;
pred[i]=x[j-1];
if(j>nr)
nr++;
}
printf("%d\n",nr);
/* for(i=1;i<=n;i++)
printf("%d ",pred[i]);
printf("\n");
for(i=1;i<=nr;i++)
printf("%d ",x[i]);
printf("\n");
*/
refac(x[nr]);
printf("\n");
}
int main()
{
read();
rez();
return 0;
}