Pagini recente » Cod sursa (job #2930838) | Cod sursa (job #880260) | Cod sursa (job #2583396) | Cod sursa (job #411594) | Cod sursa (job #2325371)
#include <fstream>
constexpr int N = 100001;
int v[N], prev[N], aux[N], start = 1;
unsigned int size = 1;
inline int binary_search(int x) {
int at = 0;
for (int step = start; step != 0; step >>= 1) if (at + step <= size && v[aux[at + step]] < x) at += step;
return at;
}
inline void increase_size() {
++size;
if (start <= size >> 1u) start <<= 1;
}
int main() {
std::ifstream in("scmax.in");
std::ofstream out("scmax.out");
int i, n, x;
in >> n >> v[1];
aux[1] = 1;
for (i = 2; i <= n; ++i) {
in >> v[i];
x = binary_search(v[i]);
if (x == size) increase_size();
prev[i] = aux[x];
aux[x + 1] = i;
}
out << size << '\n';
x = -1;
for (i = aux[size]; i != 0; i = prev[i]) aux[++x] = v[i];
for (; x >= 0; --x) out << aux[x] << ' ';
return 0;
}