/ Vijos / 题库 /

超级数组[2]

超级数组[2]

时间限制:1秒  内存限制:256M


【题目描述】

  一般的数组大家都经常使用,相信很多同学没有见过下面的超级数组 \(A[1]..A[n]\)。超级数组——它还支持下面的几个操作:

  1、\(Insert(A,x,k)\):把 \(x\) 插入到 \(A[k]\) 之后,如果 \(k==0\),表示插入到数组的最前面,成为新的 \(A[1]\)。
  2、\(Move(A,i,j)\):把 \(A[i]\) 移动 \(A[j]\) 之前,意即移动到 \(A[j-1]\) 之后,如果 \(j==n+1\)( \(n\) 表示当前数组的元素个数),表示移动最后一个元素之后。
  3、\(Delete(A,k)\):把 \(A[k]\) 删除。
  4、\(Ask(A,k)\):询问 \(A[k]\) 的值。

  现在请你写一个程序,实现这个超级数组的维护操作。

【输入格式】

  第一行 \(n、m\)。表示数组中的最初元素个数为 \(n\) ,共有 \(m\) 条命令。
  第二行为 \(A[1]..A[n]\),表示数组的最初元素。
  以下 \(m\) 行,每行一个操作,意义如题中描述,如果该操作无法执行,你的程序应忽略该操作。

【输出格式】

  对于每个Ask命令,输出对应元素的值。

【输入输出样例】

 Input

5 22
7 3 9 1 4
Ask 3
Insert 6 2
Ask 3
Delete 1
Ask 5
Insert 4 0
Insert 6 6
Ask 4
Insert 5 7 
Delete 0
Delete 1
Delete 6
Insert 3 2
Ask 1
Move 2 4
Ask 2
Move 7 1
Move 4 7
Move 2 8
Ask 6
Ask 1
Ask 7

 Output

9
6
4
9
3
3
4
5
3

【数据限制】

  对于 \(100\%\) 的数据,\(n≤1000000\),\(0<m≤100000\)

【来源】

  Mr.he**

信息

ID
2672
难度
(无)
分类
数据结构 | 平衡树 点击显示
标签
(无)
递交数
0
已通过
0
通过率
?
上传者