Pagini recente » Cod sursa (job #1609744) | Cod sursa (job #2321809) | Istoria paginii runda/oji_2018_10 | Cod sursa (job #1040066) | Cod sursa (job #2333766)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, a[100100], st, dr, mid, v[100100], tp, pv[100100];
void rec(int p) {
if (p == 0)
return;
rec(pv[p]);
out << a[p] << ' ';
}
int main() {
in >> n;
for (int i = 1; i <= n; i++)
in >> a[i];
v[++tp] = 1;
for (int i = 2; i <= n; i++) {
st = 1;
dr = tp;
while (st <= dr) {
mid = st + dr >> 1;
if (a[v[mid]] >= a[i])
dr = mid - 1;
else st = mid + 1;
}
if (st > tp)
v[++tp] = i;
else v[tp] = i;
pv[i] = v[st - 1];
}
out << tp << '\n';
rec(v[tp]);
return 0;
}