题库练习 Gellyfish and Lycoris Radiata (Easy Version)
← 上一题 下一题 →

A16604 | Gellyfish and Lycoris Radiata (Easy Version)

时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

这是该问题的简单版本。不同版本之间的区别在于本版本中 $n$ 和 $q$ 的时间限制及约束更低。

Gellyfish 有一个包含 $n$ 个集合的数组。最初,所有集合都是空的。

现在,Gellyfish 将进行 $q$ 次操作。每次操作包含一次修改操作和一次查询操作,对于第 $i$ 次($1 \leq i \leq q$)操作:

首先,会有一次修改操作,可能是以下三种之一:

1. 插入操作:给定一个整数 $r$。将元素 $i$ 插入到第 $1$ 到第 $r$ 个集合中。注意,这里插入的元素是 $i$,即操作的编号,而不是集合的编号。
2. 反转操作:给定一个整数 $r$。将第 $1$ 到第 $r$ 个集合的顺序反转。
3. 删除操作:给定一个整数 $x$。从所有包含 $x$ 的集合中删除元素 $x$。

然后进行一次查询操作:

- 查询操作:给定一个整数 $p$。输出第 $p$ 个集合中的最小元素(如果该集合为空,则答案为 $0$)。

现在,Flower 需要为每次查询操作提供答案。请你帮助她!

本题有一个额外的约束:Gellyfish 只有在 Flower 回答了上一次查询操作后,才会给出下一次操作。也就是说,你需要在线处理本题。具体请参考输入格式。

输入格式

第一行包含两个整数 $n$ 和 $q$($1 \leq n, q \leq 10^5$),分别表示集合的数量和操作次数。

由于你需要在线响应操作,操作将以编码形式给出。

接下来的 $q$ 行中,第 $i$ 行包含三个整数 $a$、$b$ 和 $c$($1 \leq a \leq 3$,$1 \leq c \leq n$),描述第 $i$ 次操作的编码形式。

其中,$a$ 表示修改操作的类型。$a=1$ 表示插入操作,$a=2$ 表示反转操作,$a=3$ 表示删除操作。

- 如果 $a=1$,则修改操作为插入操作。保证 $1 \leq b \leq n$。$r$ 的计算方式为 $r=(b+\text{ans}_{i-1}-1) \bmod n + 1$。
- 如果 $a=2$,则修改操作为反转操作。保证 $1 \leq b \leq n$。$r$ 的计算方式为 $r=(b+\text{ans}_{i-1}-1) \bmod n + 1$。
- 如果 $a=3$,则修改操作为删除操作。保证 $1 \leq b \leq q$。$x$ 的计算方式为 $x=(b+\text{ans}_{i-1}-1) \bmod q + 1$。

对于查询操作,$p$ 的计算方式为 $p = (c+\text{ans}_{i-1}-1) \bmod n + 1$。

其中 $\text{ans}_i (1 \leq i \leq q)$ 表示第 $i$ 次操作查询的答案。并且定义 $\text{ans}_0 = 0$。

输出格式

对于每次查询操作,输出查询的答案。

输入输出样例

输入 #1
5 10
1 2 2
2 3 1
1 5 3
2 2 5
1 5 2
2 4 4
3 2 2
3 1 2
3 10 5
3 2 4
输出 #1
1
0
1
1
3
1
0
5
0
0
C++ 编辑器
输入
输出