Pagini recente » Cod sursa (job #779259) | Cod sursa (job #757451) | Cod sursa (job #189734) | Cod sursa (job #2977517) | Cod sursa (job #1654281)
#include<cstdio>
using namespace std;
int v[100001],q[100001],p[100001],vec[100001];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,nr,poz=1,l1,l2,mij,poz2,cautat;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
q[1]=v[1];
p[1]=1;
for(i=2;i<=n;i++)
{
if(v[i]>q[poz])
{
q[++poz]=v[i];
p[i]=poz;
}
else
{
l1=1;
l2=poz;
while(l1<=l2)
{
mij=(l1+l2)/2;
if(q[mij]>v[i])
{
l2=mij-1;
poz2=mij;
}
else
l1=mij+1;
}
q[poz2]=v[i];
p[i]=poz2;
}
}
cautat=poz;
poz=0;
printf("%d\n",cautat);
for(i=n;i>=1&&cautat;i--)
if(p[i]==cautat)
{
vec[++poz]=v[i];
cautat--;
}
for(i=poz;i>=1;i--)
printf("%d ",vec[i]);
return 0;
}