Pagini recente » Cod sursa (job #2983708) | Cod sursa (job #1845675) | Cod sursa (job #1657108) | Cod sursa (job #2619129) | Cod sursa (job #3255842)
#include <bits/stdc++.h>
using namespace std;
int n, v[100001];
int l, d[100001];
int pred[100001];
int bin_search(int k) {
int st = 1, dr = l;
while (st < dr) {
int mid = (st + dr + 1) / 2;
if (k >= v[d[mid]]) {
st = mid;
} else {
dr = mid - 1;
}
}
if (v[d[st]] > k) {
return st;
}
return st + 1;
}
int main() {
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> v[i];
}
d[++l] = 1;
for (int i = 2; i <= n; ++i) {
if (v[i] > v[d[l]]) {
pred[i] = d[l];
d[++l] = i;
} else if (v[i] < v[d[l]]) {
int pos = bin_search(v[i]);
d[pos] = i;
pred[i] = d[pos - 1];
}
}
int pos = d[l];
stack<int> s;
while (pos != 0) {
s.push(v[pos]);
pos = pred[pos];
}
cout << s.size() << "\n";
while (!s.empty()) {
cout << s.top() << " ";
s.pop();
}
}