Pagini recente » Cod sursa (job #336871) | Cod sursa (job #1736552) | Cod sursa (job #1793982) | Cod sursa (job #837095) | Cod sursa (job #3209984)
#include <iostream>
#include <map>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MAX_LENGTH = 100000;
int minValue[MAX_LENGTH + 1];
int maxSubsequenceLen[MAX_LENGTH + 1];
int maxLen;
int lastElement;
map<int, int> pos;
void output(int lastElement) {
if (pos[lastElement] == 0) {
fout << lastElement << ' ';
return;
}
output(pos[lastElement]);
fout << lastElement << ' ';
}
int main() {
int numLen;
fin >> numLen;
int nums[MAX_LENGTH + 1];
for (int i = 1; i <= numLen; ++i) {
fin >> nums[i];
minValue[i] = MAX_LENGTH + 1;
}
for (int i = 1; i <= numLen; ++i) {
maxSubsequenceLen[i] = 0;
for (int j = maxLen; j >= 0; --j) {
if (minValue[j] < nums[i]) {
minValue[j + 1] = min(minValue[j + 1], nums[i]);
pos[nums[i]] = minValue[j];
maxSubsequenceLen[i] = j + 1;
if (maxSubsequenceLen[i] > maxLen) {
maxLen = maxSubsequenceLen[i];
lastElement = nums[i];
}
break;
}
}
}
fout << maxLen << '\n';
output(lastElement);
return 0;
}