Условие
Реализуйте класс IntQueue, работающий по принципу FIFO: первым добавленный элемент извлекается первым. Храните элементы в закрытом массиве вместимости 1000; рабочую вместимость задайте конструктором. Используйте кольцевую индексацию. Добавление и извлечение должны выполняться за O(1), без сдвига элементов массива. Готовые контейнеры запрещены.
Предусмотрите методы bool push(int value), bool pop(int &value), bool front(int &value) const, int size() const, bool empty() const. При добавлении в заполненную очередь и чтении или извлечении из пустой операция возвращает false, сохраняя состояние и выходной параметр. В остальных случаях — true.
Обработайте команды PUSH value, POP, FRONT, SIZE, EMPTY.
Ограничения
Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.
Входные данные
В первой строке вводятся capacity и Q. Следующие Q строк содержат команды. Ограничения: 1 ≤ capacity ≤ 1000, 1 ≤ Q ≤ 10000, −10⁶ ≤ value ≤ 10⁶.
Выходные данные
Для PUSH выведите OK или FULL; для POP и FRONT — значение либо EMPTY; для SIZE — количество элементов; для EMPTY — YES или NO. Каждый ответ выведите с новой строки.
Примеры
3 7 PUSH 10 PUSH 20 FRONT POP FRONT SIZE EMPTY
OK OK 10 10 20 1 NO
1 6 POP PUSH 7 PUSH 8 POP FRONT EMPTY
EMPTY OK FULL 7 EMPTY YES
2 8 PUSH 1 PUSH 2 POP PUSH 3 POP POP SIZE EMPTY
OK OK 1 OK 2 3 0 YES