Advertisement
mfgnik

Untitled

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