Pagini recente » Cod sursa (job #1238298) | Cod sursa (job #2478168) | Cod sursa (job #2429887) | Cod sursa (job #2695641) | Cod sursa (job #2233480)
#include <stdint.h>
#include <string>
#include <vector>
#include <iostream>
#include <unordered_map>
#include <memory>
#include <algorithm>
#include <deque>
#include <iterator>
#include <numeric>
#include <assert.h>
#include <limits>
#include <queue>
#include <fstream>
using namespace std;
vector<int> runAlgorithm(const vector<int> input)
{
auto higherCandidate = [](vector<int> left, vector<int> right) {
return left.size() < right.size();
};
priority_queue<vector<int>, vector<vector<int>>, decltype(higherCandidate) > outputCandidates(higherCandidate);
for_each(input.begin(), input.end(), [&](const int val) {
vector<vector<int>> putBackInQueue;
int updatedCandidates = 0;
while (!outputCandidates.empty())
{
auto candidate = outputCandidates.top();
outputCandidates.pop();
if (candidate.back() < val)
{
candidate.push_back(val);
++updatedCandidates;
}
if (updatedCandidates <= 1)
{
putBackInQueue.push_back(candidate);
}
}
if (updatedCandidates == 0)
{
outputCandidates.push(vector<int>{val});
}
for (auto candidate : putBackInQueue) {
outputCandidates.push(candidate);
}
});
return outputCandidates.top();
}
int main(){
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
int x;
for(int i=0; i<n; i++)
{
f>>x;
_input.push_back(x);
}
_output = runAlgorithm();
g<<_output.size() << '\n';
for(it = _output.begin(); it!= _output.end(); ++it)
{
g<<*it << ' ';
}
return 0;
}