Pagini recente » Cod sursa (job #2745348) | Monitorul de evaluare | Cod sursa (job #3336162) | Cod sursa (job #2672889) | Cod sursa (job #3356069)
#include <fstream>
#include <vector>
using namespace std;
const int INF = 2e9 + 1;
ifstream in("scmax.in");
ofstream out("scmax.out");
vector <int> v;
vector <int> lung;
void refac_subsirul(int p, int l, int reper) {
if (l == 0) {
return;
}
if (v[p] < reper && lung[p] == l) {
refac_subsirul(p - 1, l - 1, v[p]);
out << v[p] << " ";
} else {
refac_subsirul(p - 1, l, reper);
}
}
int main() {
int n, p_max = 0;
in >> n;
v.resize(n);
lung.resize(n);
for (int i = 0; i < n; i++) {
in >> v[i];
int l_j_max = 0;
for (int j = 0; j < i; j++) {
if (v[j] < v[i]) {
l_j_max = max(l_j_max, lung[j]);
}
}
lung[i] = 1 + l_j_max;
if (lung[i] > lung[p_max]) {
p_max = i;
}
}
in.close();
out << lung[p_max] << "\n";
refac_subsirul(p_max, lung[p_max], INF);
out << "\n";
out.close();
return 0;
}