#1055. 1-06H. nocriz与'Swappy Tree'

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

题目描述

nocriz是一个好学的同学。

nocriz同学了解到有一种叫Swappy Tree的神奇的树。

Swappy Tree 是一棵高度为 n+1n + 1,有着 2n2^n 个叶子的完全二叉树。叶子从左向右分别写着为 1,2,,2n1, 2, \dots, 2^n。 对于非叶子节点,在所有时刻,我们将从上往下第 ii 层,从左往右第 jj 个的点称为 2i1+j12^{i - 1} + j - 1。 这里,我们定义 swap(x) 为交换 xx 号节点的左右子树(交换后第 ii 个非叶子节点依然按上文中的方法定义)。 Swappy Tree上要进行以下两种操作:

  • 给定 kk (k2n)(k\leq 2^n),求出从左往右第k个叶子上的值。

  • 给定 a,ba, b (1ab2n1)(1 \le a \le b \le 2^n - 1),依次进行 swap(a),, swap(a+1),,, \dots, swap(b)

你需要代替nocriz同学实现一棵Swappy Tree。 具体来说,给定 nnqq 个询问,请对其处理并做出一棵Swappy Tree

输入格式

第一行包含两个整数 n,qn, q

接下来 qq 行,每行包括三个整数ti,ai,bit_i,a_i,b_i,表示一组操作。

ti=1t_i = 1aia_i即为询问中的kk,保证bi=0b_i=0

ti=2t_i = 2aia_ibib_i 即为修改中的 aabb

输出格式

对于每一个询问,在新的一行中输出答案。

样例

输入样例

3 10
2 5 5
1 1 0
1 2 0
1 3 0
1 4 0
2 1 3
1 2 0
1 3 0
1 5 0
1 6 0

输出样例

1
2
4
3
8
5
4
3

数据范围与提示

1n171 \le n \le 17

1q21051 \le q \le 2 \cdot 10^5