Cod sursa(job #2233484)

Utilizator rares.amarandeiRares Amarandei rares.amarandei Data 23 august 2018 14:13:11
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.7 kb

#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;
}