Pagini recente » Cod sursa (job #741857) | Cod sursa (job #2703719) | Cod sursa (job #2692254) | Cod sursa (job #1791703) | Cod sursa (job #407204)
Cod sursa(job #407204)
#include<stdio.h>
long long int INF=2000000005;
int v[100005],l[100005],i,j,max,n,s[100005],sol[100005],k,m,st,dr,poz,p;
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=1;i<=n;i++)
{
st=0;dr=k;poz=0;
while(st<=dr)
{
m=(st+dr)>>1;
if(s[m]>=v[i]){dr=m-1;poz=m;}
else st=m+1;
}
if(poz){s[poz]=v[i];l[i]=poz;}
else {s[++k]=v[i];l[i]=k;}
if(l[i]>max){max=l[i];p=i;}
}
printf("%d\n",max);
while(max)
{
if(l[p]==max)
{
sol[++j]=v[p];
max--;
}
p--;
}
for(i=j;i>=1;i--)
printf("%d ",sol[i]);
return 0;
}