Pagini recente » Cod sursa (job #732444) | Cod sursa (job #357743) | Cod sursa (job #354009) | Cod sursa (job #2977568) | Cod sursa (job #1566753)
#include <iostream>
#include <fstream>
#define MAX_N 100000
using namespace std;
ifstream file_in ("scmax.in");
ofstream file_out ("scmax.out");
int nr;
int sir[MAX_N + 1];
int lungime[MAX_N + 1];
int parinte[MAX_N + 1];
int rasp[MAX_N + 1];
/// Longest increasing subsequence
void lis() {
for (int i = 1; i <= nr; i++) {
for (int j = 1; j < i; j++) {
if(sir[j] < sir[i]) {
if(lungime[j] > lungime[i]) {
parinte[i] = j;
lungime[i] = lungime[j];
}
}
}
lungime[i]++;
}
}
int main() {
int maxim = 0, cntr = 1, element;
// Citirea datelor
file_in >> nr;
for (int i = 1; i <= nr; i++) {
file_in >> sir[i];
}
// Calcularea solutiei
lis();
for (int i = 1; i <= nr; i++) {
if (maxim < lungime[i]) {
maxim = lungime[i];
element = i;
}
}
// Afisarea solutiei
file_out << maxim << "\n";
while (element) {
rasp[cntr++] = sir[element];
element = parinte[element];
}
for (int i = cntr - 1; i > 0; i--)
file_out << rasp[i] << " ";
file_in.close();
file_out.close();
return 0;
}