Cod sursa(job #2233480)

Utilizator rares.amarandeiRares Amarandei rares.amarandei Data 23 august 2018 14:09:05
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#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;
}