Pagini recente » Cod sursa (job #2106731) | Cod sursa (job #3143946) | Cod sursa (job #1295892) | Cod sursa (job #1968372) | Cod sursa (job #1637444)
#include <cstdio>
#define max(a,b) (a>b?a:b)
#define NMAX 100005
using namespace std;
int n,i,j,k,st,dr,lastp;
int v[NMAX],d[NMAX],L[NMAX],sol[NMAX];
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]);
k=1;L[1]=1;d[1]=v[1];
for(i=2;i<=n;++i)
{
if(v[i] > d[k])
{
++k;
d[k]=v[i];
L[i]=k;
}
else
{
//cautam binar
st=1;dr=k;lastp=dr;
while(st <= dr)
{
int mij=(st+dr)/2;
if(d[mij] < v[i]) st=mij+1;
else{dr=mij-1;lastp=mij;}
}
d[lastp]=v[i];
L[i]=lastp;
}
}
printf("%d\n",k);
j=0;
for(i=n;i>=1 && k>0;--i)
{
if(L[i] == k)
{
--k;
d[++j]=v[i];
}
}
for(i=j;i>0;--i) printf("%d ",d[i]);
return 0;
}