Pagini recente » Cod sursa (job #2956222) | Cod sursa (job #2515036) | Cod sursa (job #1573874) | Cod sursa (job #1883134) | Cod sursa (job #3255802)
#include <bits/stdc++.h>
using namespace std;
int n, v[100001];
int l, d[100001];
int pred[100001];
bool comp(int a, int b) {
return v[a] < b;
}
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 = lower_bound(d + 1, d + l + 1, v[i], comp) - d;
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();
}
}