#5225. 循环队列下标模拟

循环队列下标模拟

题目描述

用长度为 N 的数组模拟循环队列,并采用“留一个空位置区分队满和队空”的方式。

规定:

  • front 指向当前队首元素的位置;
  • rear 指向下一次入队时要写入的位置;
  • 初始 front = rear = 0;
  • 入队后执行 rear = (rear + 1) % N;
  • 出队后执行 front = (front + 1) % N;
  • 队列最多保存 N-1 个元素。

有三种操作:

  • PUSH x:将 x 入队;
  • POP:删除队首元素;
  • QUERY:输出当前 front、rear 和队列中元素个数。

题目保证不会在队空时 POP,也不会在队满时 PUSH。

输入格式

第一行两个整数 N,Q。

接下来 Q 行,每行一个操作。

输出格式

每遇到一个 QUERY,输出三个整数:front rear size。

样例

5 8
PUSH 10
PUSH 20
PUSH 30
QUERY
POP
PUSH 40
PUSH 50
QUERY
0 3 3
1 0 4

数据范围

2 <= N <= 200000,1 <= Q <= 200000。