Pagini recente » Cod sursa (job #2461595) | Cod sursa (job #11775) | Cod sursa (job #68312) | Cod sursa (job #2606619) | Cod sursa (job #491402)
Cod sursa(job #491402)
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
const int N = 1 << 17;
int n, nr, x[N], v[N], pred[N];
int bs (int q) {
int step = N, i = 0;
for (; step; step >>= 1) {
if (i + step <= nr && v[x[i + step]] < q) {
i += step;
}
}
return i + 1;
}
void refac (int p) {
if (p == 0) {
return;
}
refac (pred[p]);
out << v[p] << ' ';
}
void citire () {
in >> n;
for (int i = 1; i <= n; in >> v[i++]);
}
void exe () {
for (int i = 1; i <= n; ++i) {
int p = bs (v[i]);
pred[i] = x[p - 1];
nr = p > nr ? nr + 1 : nr;
x[p] = i;
}
}
void afisare () {
out << nr << '\n';
refac (x[nr]);
}
int main () {
citire ();
exe ();
afisare ();
return 0;
}