Mai intai trebuie sa te autentifici.
Cod sursa(job #2808806)
Utilizator | Data | 25 noiembrie 2021 16:14:59 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.83 kb |
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1e5 + 5;
int v[N], l[N];
vector<int> vmin;
int main() {
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n;
cin >> n;
for (int i = 0; i < n; ++i)
cin >> v[i];
cin.close();
l[0] = 1;
vmin.push_back(v[0]);
for (int i = 1; i < n; ++i) {
auto it = lower_bound(vmin.begin(), vmin.end(), v[i]);
if (it == vmin.end()) {
vmin.push_back(v[i]);
l[i] = vmin.size();
} else {
*it = v[i];
l[i] = it - vmin.begin() + 1;
}
}
int lg = vmin.size();
cout << lg << "\n";
vector<int> ans;
for (int i = n - 1; i >= 0; --i)
if (l[i] == lg) {
ans.push_back(v[i]);
--lg;
}
for (int i = ans.size() - 1; i >= 0; --i)
cout << ans[i] << " ";
cout.close();
return 0;
}