Pagini recente » Cod sursa (job #946357) | Cod sursa (job #909954) | Cod sursa (job #257390) | Cod sursa (job #878098) | Cod sursa (job #1261909)
#include<cstdio>
#include<algorithm>
#define NMAX 100000+1
using namespace std;
int v[NMAX],p[NMAX],q[NMAX],sol[NMAX];
int main ()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,nq,*it,poz,lis;
scanf("%d",&n);
for(i=1; i<=n; i++)
scanf("%d",&v[i]);
nq=1;
q[1]=v[1];
p[1]=1;
for(i=2; i<=n; i++)
{
it= upper_bound(q+1,q+nq+1,v[i]);
poz=(int)(it-q);
if(poz>nq)
{
++nq;
}
q[poz]=v[i];
p[i]=poz;
}
printf("%d\n",nq);
lis=nq;
poz=n;
for(i=lis; i>0; i--)
{
while(p[poz]!=lis)
poz--;
sol[lis]=v[poz];
lis--;
}
for(i=1; i<=nq; i++)
printf("%d ",sol[i]);
}