Pagini recente » Cod sursa (job #2984211) | Cod sursa (job #614690) | Cod sursa (job #940820) | Cod sursa (job #2538007) | Cod sursa (job #2138521)
#include <cstdio>
#include <string>
#include <iostream>
#include <fstream>
#define MAXN 100000
int N, a[MAXN] = { 0 }, best[MAXN] = { 0 };
int prevs[MAXN] = { 0 };
int main()
{
using namespace std;
string infile = "scmax.in";
string outfile = "scmax.out";
ifstream f(infile.c_str(), std::ifstream::in);
f >> N;
for (int i = 0; i < N; ++i) {
f >> a[i];
}
f.close();
best[0] = 1;
prevs[0] = -1;
for (int i = 1; i < N; ++i) {
int max_id = -1;
int max_so_far = 0;
for (int j = 0; j < i; ++j) {
if (a[i] <= a[j]) {
continue;
}
if (best[j] > max_so_far) {
max_so_far = best[j];
max_id = j;
}
}
best[i] = max_so_far + 1;
prevs[i] = max_id;
}
ofstream g(outfile.c_str(), std::ofstream::out);
int best_id = -1;
int best_sol = 0;
for (int i = 0; i < N; ++i) {
if (best[i] > best_sol) {
best_id = i;
best_sol = best[i];
}
}
int drum[MAXN];
int i = 0;
while (best_id != -1) {
drum[i++] = a[best_id];
best_id = prevs[best_id];
}
g << best_sol << std::endl;
for (int i = best_sol - 1; i >= 0; i--) {
g << drum[i] << " ";
}
g << std::endl;
g.close();
return 0;
}