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 <= 1050 <= nums[i] <= 1091 <= queries.length <= 105queries[i].length == 3queries[i][0] ∈ {1, 2, 3}- 如果 
queries[i][0] == 1:0 <= index < nums.length0 <= value <= 109
 - 如果 
queries[i][0] == 2或queries[i][0] == 3:0 <= left <= right < nums.length
 
解法
方法一
1 |  | 
1 |  | 
1 |  | 
1 |  |