Pagini recente » Cod sursa (job #926930) | Cod sursa (job #907721) | Cod sursa (job #1548488) | Cod sursa (job #1583147) | Cod sursa (job #1414124)
#include<cstdio>
using namespace std;
int a[100002],b[100002],p[100002],s[100002],i,n,lg,mx,pos,ans,aux;
int cautbin(int dr,int x)
{
int st,mij;
st=1;
while (st<=dr){
mij=(st+dr)/2;
if (x==s[mij]) return mij;
if (x<s[mij])
dr=mij-1;
else
st=mij+1;
}
return st;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
lg=1;
s[1]=a[1];
p[1]=1;
for(i=2;i<=n;i++)
{
p[i]=cautbin(lg,a[i]);
s[p[i]]=a[i];
if(p[i]==1&&a[i]>s[1])
{
p[i]=++lg;
}
else
{
if(p[i]>lg)
{
lg=p[i];
}
}
}
mx=0;
for(i=1;i<=n;i++)
{
if(p[i]>mx)
{
mx=p[i];
pos=i;
}
}
printf("%d\n",mx);
b[1]=a[pos];
aux=pos;
ans=1;
for(i=pos-1;i>=1;i--)
{
if(p[i]==p[aux]-1&&a[i]<a[aux])
{
b[++ans]=a[i];
aux=i;
}
}
for(i=ans;i>=1;i--)
{
printf("%d ",b[i]);
}
}