Pagini recente » Cod sursa (job #2503454) | Cod sursa (job #319665) | Cod sursa (job #2708329) | Cod sursa (job #419408) | Cod sursa (job #2737477)
#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 mid = (l + r) / 2;
if (v[pos[mid]] >= v[i]) {
ans = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
if (ans == 0) {
cnt++;
ans = cnt;
}
pos[ans] = i;
dad[i] = pos[ans - 1];
}
out << cnt << "\n";
gen(pos[cnt]);
return 0;
}