#Lutece2947. Stack Rearrange

Stack Rearrange

Migrated from Lutece 2947 Stack Rearrange

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

Stack MergeStack \ Merge 题之后,我们可以预见的是,在有限次 MergeMerge 操作后,所有的栈最终会排列在一个容器里,形成一个自顶向下的序列。在这里,我们将这个序列重新标号,自顶向下序号分别为 1...n1...n

前面未提到的是, SS 国内容器内装载的每一个元素都有一个价值 valuevalue 。即每个元素实际上有两个属性——序号与价值,其中序号并不随着元素位置的变化而变化,且初始每个元素的序号就等于元素的位置。为了支持 SS 国的建设,SS 国聘请了”管理员“。管理员有以下几种操作:

  1. 把序号为 xx 的元素放在序号为 yy 的元素的前面,保证 x,yx,y 不相等。例如我们现在有初始排列 1,2,3,4,51,2,3,4,5x=2, y=5x=2,\ y=5 ,则排列变为 1,3,4,2,51,3,4,2,5
  2. 将序号为 xx 的元素对应的 valuevalue 改为 yy
  3. 查询序号为 xx 的元素上方有几个元素
  4. 查询从上往下第 xx 个元素的序号
  5. 查询从上往下 xxyy 个元素的 valuevalue 的元素和

现在将自顶向下每个元素的 valuevalue 值给出,并给出 mm 个操作细节,请你给出每个查询操作对应的答案。

Input

第一行输入两个整数 n,mn, m, 表示一共有 nn 个元素,mm 个操作。

第二行输入 nn 个整数,依次表示序号为 1...n1...n 的元素的 valuevalue 值。

接下来 mm 行,每行第一个整数 optopt 表示操作类型。

opt=1opt = 1 ,之后两个数 x,y(xy)x, y (x \neq y) ,表示将序号为 xx 的元素放在序号为 yy 的元素前面。

opt=2opt =2 ,之后两个数 x,yx,y,表示将序号为 xx 的元素对应的 valuevalue 值改为 yy

opt=3opt=3, 之后一个数 xx ,表示询问序号为 xx 的元素上方的元素个数。

opt=4opt=4, 之后一个数xx, 表示查询从上往下第 xx 个数的序号。

opt=5opt = 5, 之后两个数 x,yx,y, 表示查询从上往下第 xx 个数到第 yy 个数的 valuevalue 的元素和。

Output

对于每一个操作 3,4,53,4,5 ,输出一行一个整数表示答案。

Samples

10 10
1 1 4 5 1 4 1 9 1 9
1 5 4
1 6 3
5 1 8
4 6
4 1
1 9 10
5 3 6
2 9 4
3 3
5 1 8
26
4
1
14
3
26

Constraints

$1 \leq n, m \leq 2 \times 10^5, 0 \leq value_i \leq 10^9$

对于 opt=1opt = 1 ,有 1x,yn,   xy1\leq x,y \leq n, \ \ \ x \neq y

对于 opt=2opt = 2 ,有 1xn,   1y1091\leq x \leq n, \ \ \ 1 \leq y \leq 10 ^ 9

对于 opt=3,4opt = 3,4 ,有 1xn1\leq x \leq n

对于 opt=5opt = 5 ,有 1xyn1\leq x \leq y \leq n

Resources

2023 UESTC ICPC Training for Data Structures