Pagini recente » Cod sursa (job #1909292) | Cod sursa (job #2658442) | Cod sursa (job #2672782) | Cod sursa (job #2791415) | Cod sursa (job #1786506)
#include <stdio.h>
using namespace std;
int n,i,v[100050],poz[100050],q[100050],aux[100050],m;
int nr;
int cbin(int x,int st,int dr)
{
int mij;
while (st<dr)
{
mij=(st+dr)/2;
if (q[mij]<x)st=mij+1;
else dr=mij;
}
if(q[st]>=x)
return st;
else return st+1;
}
int main()
{
freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
scanf("%d", &n);
for(i=1;i<=n;i++)
scanf ("%d", &v[i]);
m=poz[1]=1;
q[m]=v[1];
for(i=2;i<=n;i++)
{
if(v[i]>q[m])
{q[++m]=v[i];
poz[i]=m;}
else
{
q[cbin(v[i],1,m)]=v[i];
poz[i]=cbin(v[i],1,m);}
}
printf("%d\n", m);
nr=m;
for(i=n;i>=1;i--)
{ if(poz[i]==m){aux[m]=v[i];m--;}
}
for(i=1;i<=nr;i++)
printf("%d ",aux[i]);
return 0;
}