Pagini recente » Cod sursa (job #3225019) | Cod sursa (job #63220) | Cod sursa (job #174482) | Cod sursa (job #1729353) | Cod sursa (job #1199168)
#include <cstdio>
#define SIZE 100005
int N, v[SIZE];
int k, max[SIZE];
int search(int x){
int li=1, ls=k;
while (li<=ls){
int m=(li+ls)/2;
if (max[m]>x)
li = m+1;
else
ls = m-1;
}
if (li==1 && max[1]<x)
--li;
return li;
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &N);
for (int i=1; i<=N; ++i)
scanf("%d", &v[i]);
max[k=1] = v[N--];
while (N){
int p;
p = search(v[N]);
if (p>k){
++k;
}
max[p] = v[N];
--N;
}
printf("%d\n", k);
for (int i=k; i; --i)
printf("%d ", max[i]);
return 0;
}