#1342. 异或双端队列

内存限制:512 MiB 时间限制:2000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: Rhodoks

题目描述

在这题你需要维护一个支持异或变换操作的双端队列。

我们定义队列中第i+1i+1个元素为aia_i,队首位置为a0a_0,队尾位置为an1a_{n-1}。你将读取并执行以下六种操作:

1 x\text{1 x}: 在队首插入整数xx,换句话说,队列将变成x,a0,a1,,an1x,a_0,a_1,\dots,a_{n-1}

2\text{2}: 输出并弹出队首,换句话说,你需要输出a0a_0,然后将队列置为a1,a2,,an1a_1,a_2,\dots,a_{n-1}。保证n1n \geq 1

3 x\text{3 x}: 在队尾插入整数xx,换句话说,队列将变成a0,a1,,an1,xa_0,a_1,\dots,a_{n-1},x

4\text{4}: 输出并弹出队尾,换句话说,你需要输出an1a_{n-1},然后将队列置为a0,a1,,an2a_0,a_1,\dots,a_{n-2}。保证n1n \geq 1

5 x\text{5 x}: 输出axa_x,保证0x<n0 \leq x < n

6 x\text{6 x}: 对队列进行xx异或变换。xx异或变换定义为,设原队列为aa,变换后队列为bb,则bi=aixb_i=a_{i \oplus x}。其中,\oplus为异或运算,保证对于输入的xx,变换后的序列也是合法的,即0i<n,0xi<n\forall 0 \leq i < n,0 \leq x \oplus i < n

输入格式

第一行一个正整数qq (1q5×105)(1 \leq q \leq 5 \times 10^5),为操作次数。

下面 qq 行,每行有若干个整数,含义如题意所述。

对于所有操作,保证0x1090 \leq x \leq 10^9

输出格式

对于每一个操作2、4和5,输出答案。

样例

样例输入

12
6 6
1 2
3 1
1 3
3 4
5 2
6 2
5 2
2
4
6 1
5 0

样例输出

1
3
1
2
3

数据范围与提示

每轮操作完毕的队列情况:

6 6\text{6 6}: [][]

1 2\text{1 2}: [2][2]

3 1\text{3 1}: [2,1][2,1]

1 3\text{1 3}: [3,2,1][3,2,1]

3 4\text{3 4}: [3,2,1,4][3,2,1,4]

6 2\text{6 2}: [1,2,3,4][1,2,3,4]

2\text{2}: [2,3,4][2,3,4]

4\text{4}: [2,3][2,3]

6 1\text{6 1}: [3,2][3,2]