Pagini recente » Cod sursa (job #168927) | Cod sursa (job #2321936) | Cod sursa (job #2644) | Cod sursa (job #138618) | Cod sursa (job #1255933)
#include <cstdio>
using namespace std;
int A[100001],a[100001],q[100001],poz[100001],lenn,len,i,j,n,pozz;
bool ok;
int binar(int x)
{
int st,dr,mij,pozz;
ok=false;
st=1;
dr=len;
mij=(st+dr)/2;
while (st<=dr)
{
if (q[mij]>x)dr=mij-1;
else if (q[mij]<x)st=mij+1;
else {ok=true;pozz=mij;break;}
mij=(st+dr)/2;
}
if (ok==true)return pozz;
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]);
poz[1]=1;
q[1]=a[1];
len=1;
for (i=2;i<=n;i++)
{ ok=false;
pozz=binar(a[i]);
q[pozz]=a[i];
poz[i]=pozz;
if (pozz>len)len++;
}
for (i=n;i>=1&&len>0;i--)
{
if (poz[i]==len){A[++lenn]=a[i];len--;}
}
printf("%d\n",lenn);
for (i=lenn;i>=1;i--)
printf("%d ",A[i]);
return 0;
}