Pagini recente » Cod sursa (job #3261773) | Cod sursa (job #1798424) | Cod sursa (job #2223037) | Cod sursa (job #235465) | Cod sursa (job #1909345)
#include <cstdio>
#define NMAX 1000005
using namespace std;
int n,v[NMAX],d[NMAX],L[NMAX],k;
int main()
{
int st,dr,lastp;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&v[i]);
k=1;L[1]=1;d[1]=v[1];
for(int i=2;i<=n;++i)
{
if(v[i] > d[k]){
++k;
L[i]=k;
d[k]=v[i];
}
else{
st=1;dr=k;lastp=dr;
while(st <= dr){
int mij=(dr+st)/2;
if(d[mij] > v[i]){dr=mij-1;lastp=mij;}
else st=mij+1;
}
d[lastp]=v[i];
L[i]=lastp;
}
}
printf("%d\n",k);
int j=0;
for(int i=n; i>=1 && k>0; --i)
{
if(L[i] == k)
{
--k;
d[++j]=v[i];
}
}
for(int i=j;i>=1;--i) printf("%d ",d[i]);
return 0;
}