Pagini recente » Cod sursa (job #1008148) | Cod sursa (job #2885552) | Cod sursa (job #2483987) | Cod sursa (job #1329425) | Cod sursa (job #2685313)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
typedef unsigned long long ull;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int find_ind(vector<int>& elems, int val) {
int st = 0;
int dr = elems.size() - 1;
int ind = 0;
while (st <= dr) {
int mid = (st + dr) / 2;
if (elems[mid] < val) {
ind = mid;
st = mid + 1;
}
else {
dr = dr - 1;
}
}
if (ind == dr) ind++;
return ind;
}
int main()
{
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
vector<int> elems;
vector<int> sol;
elems.push_back(v[0]);
for (int i = 1; i < n; i++) {
int ind = find_ind(elems, v[i]);
if (ind < elems.size()) {
elems[ind] = v[i];
}
else {
elems.push_back(v[i]);
sol = elems;
}
}
cout << sol.size() << '\n';
for (auto& it : sol) {
cout << it << ' ';
}
return 0;
}