维护序列
题号:NC53860
时间限制:C/C++/Rust/Pascal 5秒,其他语言10秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

给出一个长度为 的序列 。你需要实现一个数据结构,支持以下操作:

-  修改为
- 查询序列中所有满足 的点对 的最小值( 可以相同),如找不到满足条件的点对,输出

点击此处下载大样例

输入描述:

第一行输入两个正整数 ,表示序列长度、操作数,是否强制在线。 表示没有强制在线, 表示强制在线。

接下来输入一行 个正整数 ,描述初始序列。

接下来 行,每行先输入一个数 ,表示操作类型。

- 若 ,则再输入三个正整数 保证解密之后满足 ,意义如题目所述;
- 若 ,则再输入两个正整数 保证解密之后满足 ,意义如题目所述。

,你需要对输入 都异或上次询问的答案  进行解密,初始时 。若 ,则异或

输出描述:

对于每个  的操作,输出所求的最小值。
示例1

输入

复制
4 5 0
1 2 3 2
2 1 3
1 1 2 1
2 1 3
1 4 4 1
2 2 3

输出

复制
2
1
-1

说明

初始序列为 [\text{1}, 2, 3, 2]
对于第一次询问,满足条件的点对只有 (\text 1, 3),输出 \text 2
第一次修改后序列为 [\text 1, 1, 3, 2]
对于第二次询问,满足条件的点对有 (\text 1, 3)(\text 2, 3)|\text 1 - 3| = 2 > |\text 2 - 3| = 1,因此输出 \text 1
第二次修改后序列为 [\text 1, 1, 3, 1]
对于第三次询问,无法找到 \text 2,因此输出 -\text 1
示例2

输入

复制
4 5 1
1 2 3 2
2 1 3
1 3 0 3
2 3 1
1 5 5 0
2 3 2

输出

复制
2
1
-1

说明

这是样例  的强制在线版本。

备注:

输入数据较大,建议使用读入优化。