Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <assert.h>
- #include <iostream>
- class Queue {
- public:
- explicit Queue(int size);
- ~Queue();
- void push_back(int value);
- int pop_front();
- bool IsEmpty() const;
- private:
- int* buffer_;
- int buffer_size_;
- int head_;
- int tail_;
- };
- Queue::Queue(int size) : buffer_size_(size), head_(0), tail_(0) {
- buffer_ = new int[buffer_size_];
- }
- Queue::~Queue() {
- delete [] buffer_;
- }
- void Queue::push_back(int value) {
- assert((tail_ + 1) % buffer_size_ != head_);
- buffer_[tail_] = value;
- tail_ = (tail_ + 1) % buffer_size_;
- }
- int Queue::pop_front() {
- assert(head_ != tail_);
- int temp_data = buffer_[head_];
- head_ = (head_ + 1) % buffer_size_;
- return temp_data;
- }
- bool Queue::IsEmpty() const {
- return (tail_ == head_);
- }
- int main() {
- int num = 0;
- std::cin >> num;
- Queue queue(num);
- for (int i = 0; i < num; i++) {
- int operation = 0;
- int value = 0;
- std::cin >> operation >> value;
- switch (operation) {
- case 3:
- queue.push_back(value);
- break;
- case 2:
- {
- if ((queue.IsEmpty() && value != -1) ||
- (!queue.IsEmpty() && queue.pop_front() != value)) {
- std::cout << "NO" << std::endl;
- return 0;
- }
- break;
- }
- default:
- break;
- }
- }
- std::cout << "YES" << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement