Pagini recente » Cod sursa (job #2516208) | Istoria paginii runda/oni2009_ziua1 | Cod sursa (job #1316478) | Cod sursa (job #2732262) | Cod sursa (job #1220096)
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
#include <fstream>
using namespace std;
int n, a[100010], b[100010], c[100010], k;
stack<int> s;
int bsc(int x) {
int l = 1, r = k + 1, m;
while (l < r) {
m = (l+r)/2;
if (c[m] < x) l = m+1; else r = m;
}
if (l > k) {
k = l;
return k;
}
return l;
}
void print_sol(int x) {
for (int i = x; i > 0; i--)
if (b[i] == k) {
k--;
print_sol(i-1);
printf("%d ", a[i]);
}
}
int main() {
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
b[i] = bsc(a[i]);
c[b[i]] = a[i];
}
printf("%d\n", k);
print_sol(n);
return 0;
}