Pagini recente » Cod sursa (job #2744431) | summer2020 | Cod sursa (job #45487) | Cod sursa (job #2631757) | Cod sursa (job #363857)
Cod sursa(job #363857)
#include <stdio.h>
#define N 1<<17
int n,v[N],val[N],r,best[N],ant[N],poz_f,rez_f;
int cbin(int x)
{
int i,step;
for (step=1; step<=r; step<<=1);
for (i=0; step; step>>=1)
if (i+step<=r && v[val[i+step]]<x)
i+=step;
return ++i;
}
void afis(int poz)
{
if (ant[poz]>0)
afis(ant[poz]);
printf("%d ",v[poz]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
int i,poz;
scanf("%d",&v[1]);
val[++r]=1;
best[1]=1;
for (i=2; i<=n; i++)
{
scanf("%d",&v[i]);
poz=r+1;
if (v[i]>v[val[r]])
val[++r]=i;
else
{
poz=cbin(v[i]);
val[poz]=i;
}
best[i]=poz;
if (best[i]>rez_f)
{
rez_f=best[i];
poz_f=i;
}
ant[i]=val[poz-1];
}
printf("%d\n",r);
afis(poz_f);
return 0;
}