Pagini recente » Monitorul de evaluare | Cod sursa (job #1849698) | Cod sursa (job #1152196) | Cod sursa (job #1989979) | Cod sursa (job #2333770)
#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;
}
v[st] = i;
pv[i] = v[st - 1];
tp = max(tp, st);
}
out << tp << '\n';
rec(v[tp]);
return 0;
}