跳转至

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

评论

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy