Pagini recente » Cod sursa (job #2384423) | Cod sursa (job #2349408) | Cod sursa (job #2857194) | Cod sursa (job #180689) | Cod sursa (job #1379903)
#include <cstdio>
#define N 100001
using namespace std;
int n,i,L,d,s,m,a[N],b[N],c[N];
void print(int);
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
L=0;
for(i=1;i<=n;i++)
{
s=0; d=L+1;
if(a[i]>a[c[L]])
{
L++;
c[L]=i;
b[i]=c[L-1];
continue;
}
s=0; d=L;
for(;d-s-1;)
{
m=(s+d)/2;
if(a[i]>a[c[m]])s=m; else d=m;
}
b[i]=c[s];
if(a[i]<a[c[d]])
c[d]=i;
}
printf("%d\n",L);
print(c[L]);
return 0;
}
void print(int x)
{
if(x==0)return;
print(b[x]);
printf("%d ",a[x]);
}