XOR Queries of a Subarray

DDD
Release: 2024-09-13 22:17:42
Original
948 people have browsed it

XOR Queries of a Subarray

1310. XOR Queries of a Subarray

Difficulty: Medium

Topics: Array, Bit Manipulation, Prefix Sum

You are given an array arr of positive integers. You are also given the array queries where queries[i] = [lefti, righti].

For each query i compute the XOR of elements from lefti to righti (that is, arr[lefti] XOR arr[lefti + 1] XOR ... XOR arr[righti] ).

Return an array answer where answer[i] is the answer to the ith query.

Example 1:

  • Input: arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]]
  • Output: [2,7,14,8]
  • Explanation: The binary representation of the elements in the array are:
  1 = 0001
  3 = 0011
  4 = 0100
  8 = 1000
Copy after login

The XOR values for queries are:

  [0,1] = 1 xor 3 = 2
  [1,2] = 3 xor 4 = 7
  [0,3] = 1 xor 3 xor 4 xor 8 = 14
  [3,3] = 8
Copy after login

Example 2:

  • Input: arr = [4,8,2,10], queries = [[2,3],[1,3],[0,0],[0,3]]
  • Output: [8,0,4,4]

Constraints:

  • 1 <= arr.length, queries.length <= 3 * 104
  • 1 <= arr[i] <= 109
  • queries[i].length == 2
  • 0 <= lefti <= righti < arr.length

Hint:

  1. What is the result of x ^ y ^ x ?
  2. Compute the prefix sum for XOR.
  3. Process the queries with the prefix sum values.

Solution:

We can make use of the prefix XOR technique. Here's how it works:

Approach:

  1. Prefix XOR Array: We compute a prefix XOR array where prefix[i] represents the XOR of all elements from the start of the array up to index i. This allows us to compute the XOR of any subarray in constant time.

  2. XOR of a subarray:

    • To compute the XOR of elements between indices left and right:
      • If left > 0, we can compute the XOR from left to right as prefix[right] ^ prefix[left - 1].
      • If left == 0, then the result is simply prefix[right].

      This allows us to answer each query in constant time after constructing the prefix XOR array.

      Plan:

      1. Build the prefix XOR array.
      2. For each query, use the prefix XOR array to compute the XOR for the range [left_i, right_i].

      Let's implement this solution in PHP: 1310. XOR Queries of a Subarray

      <?php
      /**
       * @param Integer[] $arr
       * @param Integer[][] $queries
       * @return Integer[]
       */
      function xorQueries($arr, $queries) {
          ...
          ...
          ...
          /**
           * go to ./solution.php
           */
      }
      
      // Example 1
      $arr1 = [1, 3, 4, 8];
      $queries1 = [[0, 1], [1, 2], [0, 3], [3, 3]];
      print_r(xorQueries($arr1, $queries1)); // Output: [2, 7, 14, 8]
      
      // Example 2
      $arr2 = [4, 8, 2, 10];
      $queries2 = [[2, 3], [1, 3], [0, 0], [0, 3]];
      print_r(xorQueries($arr2, $queries2)); // Output: [8, 0, 4, 4]
      ?>
      
      Copy after login

      Explanation:

      1. Prefix XOR Construction:

        • The array prefix is built such that prefix[i] contains the XOR of all elements from arr[0] to arr[i].
        • For example, given arr = [1, 3, 4, 8], the prefix array will be [1, 1^3, 1^3^4, 1^3^4^8] or [1, 2, 6, 14].
      2. Answering Queries:

        • For each query [left, right], we compute the XOR of the subarray arr[left] to arr[right] using:
          • prefix[right] ^ prefix[left - 1] (if left > 0)
          • prefix[right] (if left == 0)

      Time Complexity:

      • Building the prefix array: O(n), where n is the length of the arr.
      • Processing the queries: O(q), where q is the number of queries.
      • Overall Time Complexity: O(n + q), which is efficient for the given constraints.

      This approach ensures we can handle up to 30,000 queries on an array of size up to 30,000 efficiently.

      Contact Links

      If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks ?. Your support would mean a lot to me!

      If you want more helpful content like this, feel free to follow me:

      • LinkedIn
      • GitHub

      The above is the detailed content of XOR Queries of a Subarray. For more information, please follow other related articles on the PHP Chinese website!

source:dev.to
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!