Pagini recente » Cod sursa (job #1301648) | Cod sursa (job #2184890) | Cod sursa (job #2632644) | Cod sursa (job #2448890) | Cod sursa (job #2029153)
#include <stdio.h>
#define MAX 100005
int n, a[MAX], b[MAX], p[MAX], lenb;
void print(int pos, int n) {
while(p[n] != pos)
--n;
if(pos > 1)
print(pos - 1, n - 1);
printf("%d ", a[n]);
}
int cb(int x) {
int l = 1, r = lenb;
while(l <= r) {
int m = (l + r) / 2;
if(b[m] >= x) {
if(m == 0 || b[m - 1] < x)
return m;
r = m - 1;
}
else
l = m + 1;
}
return lenb + 1;
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
int j;
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
j = cb(a[i]);
b[j] = a[i];
p[i] = j;
if(lenb < j)
lenb = j;
}
printf("%d\n", lenb);
print(lenb, n);
return 0;
}