Pagini recente » Cod sursa (job #165373) | Cod sursa (job #2883519) | Cod sursa (job #2411184) | Cod sursa (job #2532602) | Cod sursa (job #1413227)
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[100001],v[100001],best[100001];
int i,j,k,m,u,t,n;
int cauta(int x)
{
int ic=1;
int sf=v[0];
while (ic<=sf)
{
int mijl=(ic+sf)/2;
if (v[mijl]>=x) sf=mijl-1;
else ic=mijl+1;
}
return ic;
}
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]);
v[1]=a[1];
v[0]=1;
best[0]=1;
for (i=2; i<=n; ++i)
{
int poz=cauta(a[i]);
v[poz]=a[i];
best[i]=poz;
v[0]=max(poz,v[0]);
}
j=v[0];
i=n;
printf("%d\n",v[0]);
while (i>=1)
{
if (best[i]==j)
{
--j;
v[++u]=a[i];
}
--i;
}
for (i=u-1; i>=1; --i) printf("%d ",v[i]);
return 0;
}