Pagini recente » Cod sursa (job #2339553) | Cod sursa (job #614996) | Cod sursa (job #1035077) | Cod sursa (job #25086) | Cod sursa (job #2135022)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int N = 100000;
int n, v[N], lung[N], pred[N], vf, poz;
int cautbin(int i) {
int r = 0, pas = 1 << 28;
while (pas != 0) {
if (r + pas <= vf && v[lung[r + pas]] < v[i]) {
r += pas;
}
pas >>= 1;
}
return r;
}
void rec(int i) {
if (pred[i] != 0) rec(pred[i]);
out << v[i] << ' ';
}
int main()
{
in >> n;
for (int i = 1; i <= n; i++) in >> v[i];
for (int i = 1; i <= n; i++) {
int k = cautbin(i);
if (k == vf) {
vf++;
poz = i;
}
lung[k + 1] = i;
pred[i] = lung[k];
}
out << vf << '\n';
rec(poz);
}