Pagini recente » Cod sursa (job #2564052) | Cod sursa (job #1056938) | Cod sursa (job #299885) | Cod sursa (job #2519746) | Cod sursa (job #2865700)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
vector<int> ans, best;
int lg[MAXN], v[MAXN];
int main() {
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n, maxlg = 0;
cin >> n;
for(int i = 1; i <= n; i++)
cin >> v[i];
lg[1] = 1;
best.push_back(v[1]);
for(int i = 2; i <= n; i++) {
auto it = lower_bound(best.begin(), best.end(), v[i]);
if(it == best.end()) {
best.push_back(v[i]);
lg[i] = (int) best.size();
maxlg = max(maxlg, lg[i]);
continue;
}
lg[i] = it - best.begin() + 1;
maxlg = max(maxlg, lg[i]);
*it = v[i]
}
int cnt = maxlg;
cout << maxlg << '\n';
for(int i = n; i >= 1; i--)
if(lg[i] == cnt) {
ans.push_back(v[i]);
cnt--;
}
reverse(ans.begin(), ans.end());
for(int elem : ans)
cout << elem << ' ';
cout << '\n';
return 0;
}