Pagini recente » Cod sursa (job #1583806) | Cod sursa (job #2701501) | Cod sursa (job #1227707) | Cod sursa (job #2106473) | Cod sursa (job #727925)
Cod sursa(job #727925)
#include<cstdio>
using namespace std;
int n,m,x,p,a[100010],st[100010],poz[100010],v[100010],i;
int cautbinar(int l,int r,int x)
{
int p;
while (l<r)
{
p=(l+r)/2;
if (st[p]>x) l=p+1;
else r=p;
}
p=(l+r)/2;
if (st[p]<=x) p++;
return p;
}
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]);
st[1]=a[1];
m=1;
poz[1]=1;
for (i=2;i<=n;i++)
{
x=a[i];
if (a[i]>st[m]){ m++;
st[m]=a[i];
poz[i]=m;
}
else { if (a[i]==st[m]) poz[i]=m;
else { p=cautbinar(1,m,a[i]);
st[p]=a[i];
poz[i]=p;
}
}
}
printf("%d\n",m);
p=m;
for (i=n;i>=1 && p>0;i--)
{
if (poz[i]==p) { v[p]=a[i];
p--;
}
}
for (i=1;i<=m;i++)
printf("%d ",v[i]);
return 0;
}