Pagini recente » Monitorul de evaluare | Cod sursa (job #3320859) | Cod sursa (job #954115) | Cod sursa (job #620966) | Cod sursa (job #3356130)
#include <fstream>
#include <vector>
using namespace std;
const int INF = 2e9 + 1;
ifstream in("scmax.in");
ofstream out("scmax.out");
vector <int> x;
vector <int> lung;
void refac_subsirul(int p, int l, int reper) {
if (l == 0) {
return;
}
if (x[p] < reper && lung[p] == l) {
refac_subsirul(p - 1, l - 1, x[p]);
out << x[p] << " ";
} else {
refac_subsirul(p - 1, l, reper);
}
}
int main() {
int n, p_max = 0;
in >> n;
x.resize(n);
lung.resize(n);
for (int i = 0; i < n; i++) {
in >> x[i];
int l_j_max = 0;
for (int j = 0; j < i; j++) {
if (x[j] < x[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;
}