Pagini recente » Cod sursa (job #3276369) | Cod sursa (job #2663873) | Cod sursa (job #2121355) | Cod sursa (job #318335) | Cod sursa (job #1116900)
#include<cstdio>
#define max 100005
int st,dr,nr,v[max],ind[max],cresc[max],i,n,c;
using namespace std;
int cauta(int x)
{
int m;
while(st<dr)
{
m=(st+dr)/2;
if(cresc[m]>=x)dr=m;
if(cresc[m]<x)st=m+1;
}
return st;
}
void scrie(int m)
{
while(ind[m]!=nr) --m;
--nr; if(nr) scrie(m);
printf("%d ",v[m]);
}
int main()
{
freopen("grader_test1.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d/n",&n);
for(i=1;i<=n;++i) scanf("%d",v+i);
cresc[1]=v[1]; ind[1]=1;
nr=1;
for(i=2;i<=n;++i)
{
st=1; dr=nr;
c=cauta(v[i]);
if(cresc[c]<v[i]){++nr; cresc[nr]=v[i]; ind[i]=nr;}
else {cresc[c]=v[i]; ind[i]=c;}
}
printf("%d\n",nr);
scrie(i);
return 0;
}