超级数组[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**