Problem1508--双向链表练习题2

1508: 双向链表练习题2

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 159  Solved: 78
[Submit] [Status] [Web Board] [Creator:]

Description

pipi有一个长度为n的数组a_1,a_2,...,a_n,他希望你支持k次操作,每次操作为下面几个操作之一:
1 反转数组(即对于i=1,2,...,\lfloor\frac{n}{2}\rfloor,依次执行操作swap(a_i,a_{n-i+1})
2 输出a_i,随后删除a_1,其它元素往前移动(即对于i=1,2,...,n-1,依次执行操作a_i=a_{i+1}),执行操作后数组的长度减1
3 输出a_n,随后删除a_n,执行操作后数组的长度减1
4\ val 在数组前面插入一个值val(即对于i=n+1,n,...,2,依次执行操作a_i=a_{i-1},最后再执行操作a_1=val),执行操作后数组的长度加1
5\ val 在数组后面插入一个值val(即执行操作a_{n+1}=val),执行操作后数组的长度加1

Input

第一行输入两个整数n,k(1\le n,k\le 300000)
第二行n个整数a_1,a_2,...,a_n(1\le a_i\le 10^9)
接下来k行每行输入两个整数op,val(1\le op\le 5,如果1\le op\le 3,val=0,否则1\le val\le 1000000000)
1\le op\le 3时,val不起任何作用,仅为了输入方便。
数据保证执行2,3操作时数组非空。

Output

对于每个2,3操作,输出对应的结果,占一行。

Sample Input

5 8
1 2 3 4 5
1 0
2 0
3 0
4 5
5 8
1 0
2 0
3 0

Sample Output

5
1
8
5

HINT

1次操作为1\ 0,数组被反转为5\ 4\ 3\ 2\ 1
2次操作为2\ 0,输出第一个元素5,随后数组变为4\ 3\ 2\ 1
3次操作为3\ 0,输出最后一个元素1,随后数组变为4\ 3\ 2
4次操作为4\ 5,在数组前面插入一个5,随后数组变为5\ 4\ 3\ 2
5次操作为5\ 8,在数组后面插入一个8,随后数组变为5\ 4\ 3\ 2\ 8
6次操作为1\ 0,数组被反转为8\ 2\ 3\ 4\ 5
7次操作为2\ 0,输出第一个元素8,随后数组变为2\ 3\ 4\ 5
8次操作为3\ 0,输出最后一个元素5,随后数组变为2\ 3\ 4

Source/Category

中等 STL