Sum of Even Numbers After Queries

medium array simulation running sum

Problem

You are given an integer array nums and an array queries where queries[i] = [val, index]. For each query, add val to nums[index], then report the sum of the even values of nums after that update. Return an array answer where answer[i] is the answer to the i-th query.

Inputnums = [1, 2, 3, 4], queries = [[1,0],[-3,1],[-4,0],[2,3]]
Output[8, 6, 2, 4]
After [1,0], nums = [2,2,3,4], even sum = 2+2+4 = 8. After [-3,1], nums = [2,-1,3,4], even sum = 2+4 = 6. After [-4,0], nums = [-2,-1,3,4], even sum = -2+4 = 2. After [2,3], nums = [-2,-1,3,6], even sum = -2+6 = 4.

def sum_even_after_queries(nums, queries):
    even_sum = sum(x for x in nums if x % 2 == 0)
    answer = []
    for val, idx in queries:
        if nums[idx] % 2 == 0:
            even_sum -= nums[idx]
        nums[idx] += val
        if nums[idx] % 2 == 0:
            even_sum += nums[idx]
        answer.append(even_sum)
    return answer
function sumEvenAfterQueries(nums, queries) {
  let evenSum = 0;
  for (const x of nums) if (x % 2 === 0) evenSum += x;
  const answer = [];
  for (const [val, idx] of queries) {
    if (nums[idx] % 2 === 0) evenSum -= nums[idx];
    nums[idx] += val;
    if (nums[idx] % 2 === 0) evenSum += nums[idx];
    answer.push(evenSum);
  }
  return answer;
}
class Solution {
    public int[] sumEvenAfterQueries(int[] nums, int[][] queries) {
        int evenSum = 0;
        for (int x : nums) if (x % 2 == 0) evenSum += x;
        int[] answer = new int[queries.length];
        for (int i = 0; i < queries.length; i++) {
            int val = queries[i][0], idx = queries[i][1];
            if (nums[idx] % 2 == 0) evenSum -= nums[idx];
            nums[idx] += val;
            if (nums[idx] % 2 == 0) evenSum += nums[idx];
            answer[i] = evenSum;
        }
        return answer;
    }
}
vector<int> sumEvenAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {
    int evenSum = 0;
    for (int x : nums) if (x % 2 == 0) evenSum += x;
    vector<int> answer;
    for (auto& q : queries) {
        int val = q[0], idx = q[1];
        if (nums[idx] % 2 == 0) evenSum -= nums[idx];
        nums[idx] += val;
        if (nums[idx] % 2 == 0) evenSum += nums[idx];
        answer.push_back(evenSum);
    }
    return answer;
}
Time: O(n + q) Space: O(1)