CF1066C Books Queries

题目描述

你有一个书架,想在上面放些书。 共有 $q$ 次操作,分为三种类型: 1. L $id$ - 将编号为 $id$ 的书放到书架上现有的最靠左的书的左边; 2. R $id$ - 将编号为 $id$ 的书放到书架上现有的最靠右的书的右边; 3. ? $id$ - 计算最少需要从左边或右边取下多少本书,才能使编号为 $id$ 的书处在最左边或最右边。 你可以假设,你要放入的第一本书可以放在任何位置(这并不重要),并且类型 $3$ 的操作总是有效的(可以保证每个此类操作中的书都已经放入)。你还可以假设同一本书不会被放在书架上两次,即前两种类型的操作中相同的 $id$ 不会重复出现。 你的任务是按照输入中出现的顺序回答所有类型 $3$ 的操作。 请注意,在回答了类型 $3$ 的操作后,所有的书仍然在书架上,书的相对顺序不会改变。 **Python 选手请考虑使用 PyPy 提交。**

输入格式

输入的第一行包含一个整数 $q$($1 \le q \le 2 \cdot 10^5$),表示操作次数。 接下来的 $q$ 行,第 $i$ 行包含第 $i$ 个操作,格式如题面所示。保证操作是有效的(对于类型 $3$ ,保证操作中的书已经被放在书架上,对于其他类型,保证操作中的书还未被放在书架上)。 保证输入中至少有一个操作类型为 $3$ 。 对于每次操作,$1 \le id \le 2 \cdot 10^5$。

输出格式

按照输入中出现的顺序输出类型 $3$ 的操作的答案。

说明/提示

**【样例解释 #1】** 每次操作后书架的状态: 1. 书架状态为 $[1]$; 2. 书架状态为 $[1, 2]$; 3. 书架状态为 $[1, 2, 3]$; 4. 书架状态为 $[1, \textbf{2}, 3]$ ,所以答案是 $1$; 5. 书架状态为 $[4, 1, 2, 3]$; 6. 书架状态为 $[4, \textbf{1}, 2, 3]$ ,所以答案是 $1$; 7. 书架状态为 $[5, 4, 1, 2, 3]$; 8. 书架状态为 $[5, 4, \textbf{1}, 2, 3]$,所以答案是 $2$。 **【样例解释 #2】** 每次操作后书架的状态: 1. 书架状态为 $[100]$; 2. 书架状态为 $[100, 100000]$; 3. 书架状态为 $[100, 100000, 123]$; 4. 书架状态为 $[101, 100, 100000, 123]$; 5. 书架状态为 $[101, 100, 100000, \textbf{123}]$,所以答案是 $0$; 6. 书架状态为 $[10, 101, 100, 100000, 123]$; 7. 书架状态为 $[10, 101, 100, 100000, 123, 115]$; 8. 书架状态为 $[10, 101, \textbf{100}, 100000, 123, 115]$,所以答案是 $2$; 9. 书架状态为 $[10, 101, 100, 100000, 123, 115, 110]$; 10. 书架状态为 $[10, 101, 100, 100000, 123, \textbf{115}, 110]$,所以答案是 $1$。