跳转至

3526. 范围异或查询与子数组反转 🔒

题目描述

给定一个长度为 n 的整数数组 nums 和一个长度为 q 的二维整数数组 queries,其中的每个查询是以下三种类型之一:

  1. 更新queries[i] = [1, index, value]
    赋值 nums[index] = value

  2. 范围异或查询queries[i] = [2, left, right]
    计算 子数组 中所有元素的按位异或 nums[left...right],并记录结果。

  3. 反转 子数组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

评论