Pagini recente » Cod sursa (job #910195) | Cod sursa (job #2705512) | Cod sursa (job #2609860) | Cod sursa (job #2512212) | Cod sursa (job #1654322)
#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,pp;
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;
pp=1;
while(l1<=l2)
{
mij=(l1+l2)/2;
if(q[mij]>v[i])
{
l2=mij-1;
poz2=mij;
}
else
if(q[mij]<v[i])
l1=mij+1;
else
if(q[mij]==v[i])
{
pp=0;
break;
}
}
if(pp==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;
}