3526. 范围异或查询与子数组反转 🔒
题目描述
给定一个长度为 n
的整数数组 nums
和一个长度为 q
的二维整数数组 queries
,其中的每个查询是以下三种类型之一:
-
更新:
queries[i] = [1, index, value]
赋值nums[index] = value
。 -
范围异或查询:
queries[i] = [2, left, right]
计算 子数组 中所有元素的按位异或nums[left...right]
,并记录结果。 -
反转 子数组:
queries[i] = [3, left, right]
原地反转nums[left...right]
子数组。
按照遇到的顺序返回所有范围异或查询的结果数组。
示例 1:
输入:nums = [1,2,3,4,5], queries = [[2,1,3],[1,2,10],[3,0,4],[2,0,4]]
输出:[5,8]
解释:
-
查询 1:
[2, 1, 3]
– 计算[2, 3, 4]
子数组的异或和,结果为 5。 -
查询 2:
[1, 2, 10]
– 将nums[2]
更新为 10,数组更新为[1, 2, 10, 4, 5]
。 -
查询 3:
[3, 0, 4]
– 反转整个数组,得到[5, 4, 10, 2, 1]
。 -
查询 4:
[2, 0, 4]
– 计算[5, 4, 10, 2, 1]
子数组的异或和,结果为 8。
示例 2:
输入:nums = [7,8,9], queries = [[1,0,3],[2,0,2],[3,1,2]]
输出:[2]
解释:
-
查询 1:
[1, 0, 3]
– 将nums[0]
更新为 3,数组更新为[3, 8, 9]
。 -
查询 2:
[2, 0, 2]
– 计算[3, 8, 9]
子数组的异或和,结果为 2。 -
查询 3:
[3, 1, 2]
– 反转子数组[8, 9]
,得到[9, 8]
。
提示:
1 <= nums.length <= 105
0 <= nums[i] <= 109
1 <= queries.length <= 105
queries[i].length == 3
queries[i][0] ∈ {1, 2, 3}
- 如果
queries[i][0] == 1
:
0 <= index < nums.length
0 <= value <= 109
- 如果
queries[i][0] == 2
或queries[i][0] == 3
:0 <= left <= right < nums.length
解法
方法一
1 |
|
1 |
|
1 |
|
1 |
|