Pagini recente » Cod sursa (job #2947977) | Cod sursa (job #1914771) | Cod sursa (job #787381) | Cod sursa (job #944834) | Cod sursa (job #2737415)
#include <bits/stdc++.h>
using namespace std;
#define debug(x) cerr << #x << " = " << x << "\n";
ifstream in("scmax.in");
ofstream out("scmax.out");
const int max_n = (int)1e5 + 5;
int n;
int v[max_n];
int dad[max_n];
int cnt;
int pos[max_n];
void gen(int u) {
if (!dad[u]) {
out << v[u] << " ";
return;
}
gen(dad[u]);
out << v[u] << " ";
}
int main() {
in >> n;
for (int i = 1; i <= n; i++) {
in >> v[i];
}
for (int i = 1; i <= n; i++) {
int l = 1, r = cnt, ans = 0;
while (l <= r) {
int m = (l + r) / 2;
if (v[pos[m]] >= v[i]) {
ans = m;
r = m - 1;
} else {
l = m + 1;
}
}
if (ans == 0) {
cnt++;
ans = cnt;
}
pos[cnt] = i;
dad[i] = pos[cnt - 1];
}
out << cnt << "\n";
gen(pos[cnt]);
return 0;
}