Pagini recente » Cod sursa (job #1076579) | Cod sursa (job #1784328) | Cod sursa (job #376768) | Cod sursa (job #265544) | Cod sursa (job #949931)
Cod sursa(job #949931)
#include <cstdio>
using namespace std;
int v[100005],q[100005],p[100005],sol[100005];
int bs(int x,int dr)
{
int st=1,med,last=1;
while(st<=dr)
{
med=(st+dr)/2;
if(x<=q[med])
dr=med-1;
else
{
st=med+1;
last=st;
}
}
return last;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int i,n,lmax,poz;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
q[1]=v[1];lmax=1;p[1]=1;
for(i=2;i<=n;i++)
{
poz=bs(v[i],lmax);
q[poz]=v[i];
p[i]=poz;
if(p[i]>lmax)
lmax=p[i];
}
printf("%d\n",lmax);
int w=0;
for(i=n;lmax>=1;i--)
{
if(p[i]==lmax)
{
sol[++w]=v[i];
lmax--;
}
}
for(i=w;i>=1;i--)
printf("%d ",sol[i]);
return 0;
}