#Lutece2939. Stack Merge

Stack Merge

Migrated from Lutece 2939 Stack Merge

All parts of this problem, including description, images, samples, data and checker, might be broken. If you find bugs in this problem, please contact the admins.

Description

在S国里,水平分布着 nn 个料堆容器,每一个料堆容器可以视为一个存储空间无限大的栈,编号分别为 1,2,...,n1,2,...,n 。起初,第 ii 个栈中存在着唯一的元素 ii

现在我们定义以下若干种操作:

  1. 设置一个新的临时栈 Temp_StacktTemp\_Stack_t ,选择第 kk 个栈中的所有元素,依次将 StackkStack_k 中的自顶向下的连续元素弹出并插入 Temp_StacktTemp\_Stack_t
  2. 选择第 pp 个栈 StackpStack_p ,将第 tt 个临时栈 Temp_StacktTemp\_Stack_t 中的元素依次弹出并插入 StackpStack_p
  3. 查询此时在 Stack1Stack_1StacknStack_n 中空栈的个数。
  4. 查询元素 xxxx 所属的栈中的元素排名。其中栈内元素排名定义为自栈顶向下的元素计数,规定栈顶元素排名为1。

由于S国的限制,上述四个操作也存在一些限制:

  1. 当一个栈为空后,该栈即拒绝接受任何元素进入,即无法再进行操作 2;
  2. 每一次进行操作 4 的询问时,保证不存在一个临时栈中存在元素。

针对给出的m组操作,请你输出每组操作 3 与操作 4 对应的答案。

Input

第一行两个整数 n, mn, \ m,表示初始栈的个数和操作个数。

接下来 mm 行,针对第 ii 行,首先读入操作种类 optopt

opt=1opt = 1 ,则接下来一个正整数 kk ,表示选择第 kk 个栈中的自顶向下所有的元素插入临时栈中,题面中的 tt 为这里操作的序号 ii

opt=2opt = 2, 则接下来两个正整数 p, tp, \ t ,表示将第 tt 个临时栈 Temp_StacktTemp\_Stack_t 中的元素插入 StackpStack_p

opt=3opt=3 ,表示询问此时除去临时栈外的空栈的个数。

opt=4opt=4 ,则接下来一个正整数 xx ,表示询问 xx 在其栈中的排名。

Output

针对每个 opt=3opt = 3 以及 opt=4opt=4 ,每行输出一个整数表示答案。

Samples

5 16
1 1
3
2 2 1
4 2
4 1
4 3
4 5
1 2
3
1 3
2 4 10
2 4 8
4 2
4 3
4 4
4 5
1
2
1
1
1
2
2
3
4
1

Constraints

1n106, 1m2×1061\leq n \leq 10^6, \ 1\leq m \leq 2 \times 10^6opt{1, 2, 3, 4}opt \in \{1,\ 2, \ 3, \ 4 \}

1kn1 \leq k \leq n

1pn1\leq p \leq n1tm1\leq t \leq m ,保证 StackpStack_p 不为空且第 tt 个操作为操作 1

1xn1 \leq x \leq n

Resources

2023 UESTC ICPC Training for Data Structures