Pagini recente » Cod sursa (job #3235588) | Cod sursa (job #2481028) | Cod sursa (job #1587414) | Cod sursa (job #2276442) | Cod sursa (job #3307094)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int main () {
int n;
fin >> n;
vector <int> v (n);
for (int i = 0; i < n; ++i)
fin >> v[i];
vector <int> D, poz (n);
for (int i = 0; i < n; ++i) {
auto it = lower_bound(D.begin(), D.end(), v[i]);
if (it == D.end()) {
D.push_back(v[i]);
poz[i] = D.size() - 1;
}
else {
*it = v[i];
poz[i] = it - D.begin();
}
}
vector <int> rez;
int j = n - 1;
for (int i = D.size() - 1; i >= 0; --i) {
while (poz[j] != i)
j--;
rez.push_back(v[j]);
}
fout << rez.size() << '\n';
for (int i = rez.size() - 1; i >= 0; --i)
fout << rez[i] << ' ';
return 0;
}