XOR After Range Multiplication Queries I

medium array simulation modular arithmetic

Problem

You are given an array nums of length n and a list of queries [l, r, k, v]. For each query, start at idx = l and while idx ≤ r set nums[idx] = (nums[idx] · v) mod (109+7) then advance idx += k. After all queries, return the bitwise XOR of every element in nums.

Inputnums = [1,1,1], queries = [[0,2,1,4]]
Output4
The query multiplies indices 0, 1, 2 (step 1) by 4, so [1,1,1] → [4,4,4]. Then 4 ^ 4 ^ 4 = 4.

def xorAfterQueries(nums, queries):
    MOD = 10**9 + 7
    for l, r, k, v in queries:        # apply each query in order
        idx = l
        while idx <= r:               # touch every k-th index in [l, r]
            nums[idx] = (nums[idx] * v) % MOD
            idx += k
    result = 0
    for x in nums:                    # XOR-fold the whole array
        result ^= x
    return result
function xorAfterQueries(nums, queries) {
  const MOD = 1000000007n;
  for (const [l, r, k, v] of queries) {   // apply each query in order
    for (let idx = l; idx <= r; idx += k) // touch every k-th index in [l, r]
      nums[idx] = Number((BigInt(nums[idx]) * BigInt(v)) % MOD);
  }
  let result = 0;
  for (const x of nums) result ^= x;       // XOR-fold the whole array
  return result;
}
int xorAfterQueries(int[] nums, int[][] queries) {
    final long MOD = 1_000_000_007L;
    for (int[] q : queries) {              // apply each query in order
        int l = q[0], r = q[1], k = q[2], v = q[3];
        for (int idx = l; idx <= r; idx += k)  // every k-th index in [l, r]
            nums[idx] = (int) ((long) nums[idx] * v % MOD);
    }
    int result = 0;
    for (int x : nums) result ^= x;        // XOR-fold the whole array
    return result;
}
int xorAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {
    const long long MOD = 1000000007LL;
    for (auto& q : queries) {              // apply each query in order
        int l = q[0], r = q[1], k = q[2], v = q[3];
        for (int idx = l; idx <= r; idx += k)  // every k-th index in [l, r]
            nums[idx] = (int)((long long)nums[idx] * v % MOD);
    }
    int result = 0;
    for (int x : nums) result ^= x;        // XOR-fold the whole array
    return result;
}
Time: O(n + Σ ((r−l)/k + 1)) Space: O(1)