Pagini recente » Cod sursa (job #843769) | Cod sursa (job #2351568) | Cod sursa (job #3175147) | Cod sursa (job #2825089) | Cod sursa (job #2440346)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
inline void read(ifstream& in, int& n, vector<int>& v) {
in >> n;
v.resize(n);
for (int i = 0; i < n; ++i)
in >> v[i];
}
inline int computeMaxim(int n, vector<int>& v, vector<int>& best, vector<int>& from) {
best.resize(n, 0);
vector<int> pre(n, 0);
int solutionIdx = 0;
for (int i = 0; i < n; ++i) {
best[i] = 1;
pre[i] = i;
for (int j = 0; j < i; ++j) {
if (v[j] < v[i] && best[j] >= best[i]) {
best[i] = best[j] + 1;
pre[i] = j;
}
}
if (best[i] >= best[solutionIdx])
solutionIdx = i;
}
int i;
for (i = solutionIdx; i != pre[i]; i = pre[i])
from.push_back(i);
from.push_back(i);
return solutionIdx;
}
int main() {
vector<int> a;
vector<int> best;
vector<int> from;
int n;
ifstream in("scmax.in");
ofstream out("scmax.out");
read(in, n, a);
out << best[computeMaxim(n, a, best, from)] << endl;
for (auto el = from.rbegin(); el != from.rend(); ++el)
out << a[*el] << ' ';
out.close();
in.close();
return 0;
}