Advertisement
mfgnik

Untitled

Jun 29th, 2020
1,072
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <limits>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6.  
  7.  
  8. class Stack {
  9. public:
  10.     bool empty() {
  11.         return stack_.empty();
  12.     }
  13.  
  14.     void push(int element) {
  15.         if (stack_.empty()) {
  16.             stack_.emplace_back(element, element);
  17.         } else {
  18.             stack_.emplace_back(element, std::min(element, stack_.back().current_min));
  19.         }
  20.     }
  21.  
  22.     void pop() {
  23.         stack_.pop_back();
  24.     }
  25.  
  26.     int back() {
  27.         return stack_.back().value;
  28.     }
  29.  
  30.     int get_min() {
  31.         if (stack_.empty()) {
  32.             return std::numeric_limits<int>::max();
  33.         }
  34.         return stack_.back().current_min;
  35.     }
  36.  
  37. private:
  38.     struct Item {
  39.         int value;
  40.         int current_min;
  41.  
  42.         Item(int value, int current_min)
  43.                 : value(value), current_min(current_min) {}
  44.     };
  45.  
  46.     std::vector<Item> stack_;
  47. };
  48.  
  49. class Queue {
  50. public:
  51.  
  52.     bool empty() {
  53.         return s_1_.empty() && s_2_.empty();
  54.     }
  55.  
  56.     void push(int element) {
  57.         s_1_.push(element);
  58.     }
  59.  
  60.     int pop() {
  61.         if (s_2_.empty()) {
  62.             while (!s_1_.empty()) {
  63.                 s_2_.push(s_1_.back());
  64.                 s_1_.pop();
  65.             }
  66.         }
  67.         int back = s_2_.back();
  68.         s_2_.pop();
  69.         return back;
  70.     }
  71.  
  72.     int get_min() {
  73.         return std::min(s_1_.get_min(), s_2_.get_min());
  74.     }
  75.  
  76. private:
  77.     Stack s_1_;
  78.     Stack s_2_;
  79. };
  80.  
  81. int main() {
  82.     Queue queue;
  83.     int numbers_amount, num;
  84.     std::cin >> numbers_amount;
  85.     for (int i = 0; i < numbers_amount; ++i) {
  86.         std::cin >> num;
  87.         if (num == 0) {
  88.             if (queue.empty()) {
  89.                 std::cout << -1 << std::endl;
  90.             } else {
  91.                 std::cout << queue.get_min() << std::endl;
  92.                 queue.pop();
  93.             }
  94.         } else {
  95.             queue.push(num);
  96.         }
  97.     }
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement