Pagini recente » Cod sursa (job #131133) | Cod sursa (job #1234539) | Cod sursa (job #1567176) | Cod sursa (job #216058) | Cod sursa (job #1822239)
#include <iostream>
#include <vector>
#include <fstream>
int binsrc(int n, std::vector<int> &vec, int start, int stop, int key) {
int m;
while (stop - start > 1) {
m = start + (stop - start) / 2;
if (vec[m] > key) {
stop = m;
} else {
start = m;
}
}
return stop;
}
int solve(int n, std::vector<int> &v) {
if (v.size() == 0) {
return -1;
}
int length = 1;
std::vector<int> t(v.size(), 0);
t[0] = v[0];
for (size_t i = 1; i < v.size(); i++) {
if (v[i] < t[0]) {
t[0] = v[i];
} else if (v[i] > t[length - 1]) {
t[length++] = v[i];
} else {
t[binsrc(n, t, -1, length - 1, v[i])] = v[i];
}
}
std::ofstream fout("scmax.out");
fout << length << "\n";
for (int i = 0; i < length; i++) {
fout << t[i] << " ";
}
return length;
}
void read(int &n, std::vector<int> &v) {
int aux;
std::ifstream fin("scmax.in");
fin >> n;
for (size_t i = 0; i < n; i++) {
fin >> aux;
v.push_back(aux);
}
fin.close();
}
int main(int argc, char *argv[]) {
int n;
std::vector<int> v;
read(n, v);
solve(n, v);
return 0;
}