Pagini recente » Rating Butnaru George (Butnaru) | Cod sursa (job #3298674) | Cod sursa (job #3298611) | Rating Mugur Tomita (mugurtomita) | Cod sursa (job #895716)
Cod sursa(job #895716)
#include <cstdio>
using namespace std;
int a[100010],q[100010],p[100010],i,nr,poz,max,n,b[100010],n1;
int caut_bin(int x, int st, int dr)
{
int m;
while (st<=dr && q[m]!=x)
{
m=(st+dr)/2;
if (q[m]==x) return m;
else
if (q[m]>x) dr=m-1;
else
st=m+1;
}
return st;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d\n",&n);
for (i=1; i<=n; i++)
scanf("%d ",&a[i]);
q[1]=a[1];
p[1]=1;
nr=1;
for (i=2; i<=n; i++)
{
poz=caut_bin(a[i],1,nr);
if (poz>nr) {q[++nr]=a[i];}
q[poz]=a[i];
p[i]=poz;
if (p[i]>max) max=p[i];
}
printf("%d\n",max);
for (i=n; i>=1; i--)
if (p[i]==max && max!=0)
{
b[++n1]=a[i];
max--;
}
for (i=n1; i>=1; i--)
printf("%d ",b[i]);
return 0;
}