Pagini recente » Cod sursa (job #1517599) | Cod sursa (job #491169) | Cod sursa (job #182974) | Cod sursa (job #5019) | Cod sursa (job #2795643)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n, v[100002], rez[100002];
vector<int> lg;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
lg.emplace_back(1e9);
for (int i = n; i >= 1; i--) {
if (v[i] < lg[lg.size() - 1]) {
lg.emplace_back(v[i]);
rez[i] = lg.size() - 1;
}
else {
int st = 1;
int dr = lg.size() - 1;
int mid = (dr + st) / 2;
while (st + 1 < dr) {
mid = (dr + st) / 2;
if (lg[mid] < v[i]) {
dr = mid;
}
else {
st = mid;
}
}
if (lg[dr] <= v[i]) {
rez[i] = dr;
lg[dr] = v[i];
}
}
}
int prev = -1, cntalt = 0;
int cnt = lg.size() - 1;
for (int i = 1; i <= n; i++) {
if (rez[i] == cnt && v[i] >= prev) {
cntalt++;
prev = v[i];
cnt--;
}
}
cout << cntalt + 1<<'\n';
prev = -1;
cnt = lg.size() - 1;
for (int i = 1; i <= n; i++) {
if (rez[i] == cnt && v[i] > prev) {
cout << v[i] << ' ';
prev = v[i];
cnt--;
}
}
}