SP28597 BDOI16A - Guess the Queue
题目描述
**猜队列**
在巴士城,出行唯一的交通工具是公交车。人们需要排队等候才能上车。每个人都有一个独特的公交**ID**。队伍最前面的人就是第一位,而最靠后的人是最后一位。显然,最前面的会第一个上车,最后面的则最后上车。
虽说入队应该从后排进行,但迟到的人有时候会选择另一种方式插队,虽然这样非常不礼貌。由于队伍两侧被围栏阻挡,插队只能从队伍前方进入。此外,耐心耗尽的人可能会选择直接离开队伍,从后方步行去目的地。
你的任务是处理以下三种操作:
1. ‘**1 _x y_’:如果 _x_ 是‘**B**’,ID 为 _y_ 的人从队尾进入;如果 _x_ 是‘**F**’,则从队首进入。
2. ‘**2 _x_’:如果 _x_ 是‘**B**’,队尾的人离开队伍;如果 _x_ 是‘**F**’,则队首的人离开。
3. ‘**3 _x y_’:如果 _x_ 是‘**D**’,查询队伍中第 _y_ 位的人的 **ID** ;如果 _x_ 是‘**P**’,查询 ID 为 _y_ 的人当前所在的位置。
输入格式
输入的第一行是测试用例的数量 _T_ **(1 ≤** _T_ **≤ 5)**。接下来是 _T_ 个测试用例。
每个测试用例以一个整数 _N_ 开始,表示操作的总数。接下来的 _N_ 行,每行表示一种操作,按顺序给出。
保证输入的操作都是有效的,因此对于第二种操作,队伍总是非空;对于第三种操作,给定的位置或 **ID** 必须已经在队伍中。此外,已经离开队伍的人不会重新加入。
输出格式
对于每个测试用例,输出一个用例编号,格式为“**Case x:**”,其中 _x_ 是用例编号。
对于每个第三种操作,输出一个整数,表示该查询的结果。
说明/提示
对于简单版本,**1 ≤** _N_ **≤ 2000**
对于困难版本,**1 ≤** _N_ **≤ 200000**
一般情况下,
**1 ≤ 每个 ID ≤ 10^9**,每人的 ID 唯一
**1 ≤ 每个位置 ≤ 当前队伍的大小**
**样例输入**
```
1
7
1 B 1
1 B 2
1 F 3
3 D 3
2 B
1 F 4
3 D 2
```
**样例输出**
```
Case 1:
2
3
```
**样例解释**
在这个测试用例中,需要执行 7 个操作。
开始时,队伍为空。ID 分别为 1 和 2 的两人从后方入队,接着 ID 为 3 的人从前方入队。现在队伍中有 3 个人,第 3 位的是 ID 为 2 的人。
后来,ID 为 2 的人从队尾离队,只剩下两个人。
最后,ID 为 4 的人从前方入队,现在队伍中又有 3 个人,第 2 位的是 ID 为 3 的人。
**本翻译由 AI 自动生成**