Pagini recente » Cod sursa (job #2637740) | Cod sursa (job #3210806) | Cod sursa (job #1965524) | Cod sursa (job #1566408) | Cod sursa (job #2233484)
#include "stdafx.h"
#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");
vector<int> input;
vector<int> output;
int n = 0;
f >> n;
int x = 0;
for (int i = 0; i<n; i++)
{
f >> x;
input.push_back(x);
}
output = runAlgorithm(input);
g << output.size() << '\n';
for (auto it = output.begin(); it != output.end(); ++it)
{
g << *it << ' ';
}
return 0;
}