Pagini recente » Cod sursa (job #1811348) | Cod sursa (job #670883) | Cod sursa (job #2357327) | Cod sursa (job #1390995) | Cod sursa (job #2714929)
#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
const int kMaxN = 1e5 + 5;
const int kInf = (1LL << 31) - 1;
int a[kMaxN];
int last[kMaxN];
int where[kMaxN];
int main() {
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
last[i] = kInf;
}
int ans = 1;
for (int i = 1; i <= n; i++) {
int index = lower_bound(last + 1, last + n + 1, a[i]) - last;
last[index] = a[i];
where[i] = index;
ans = max(ans, index);
}
cout << ans << '\n';
vector<int> sol;
for (int i = n; i >= 1; i--) {
if (where[i] == ans) {
sol.push_back(a[i]);
ans--;
}
}
reverse(sol.begin(), sol.end());
for (auto it : sol) {
cout << it << " ";
}
return 0;
}