
Input: n =3, queries =[[0,0,1],[1,2,2],[0,2,3],[1,0,4]]Output: 23Explanation: The image above describes the matrix after each query. The sum of the matrix after all queries are applied is23.

Input: n =3, queries =[[0,0,4],[0,1,2],[1,0,1],[0,2,3],[1,2,1]]Output: 17Explanation: The image above describes the matrix after each query. The sum of the matrix after all queries are applied is17.
Process the queries in reverse. For each row/column, only the last update matters. Track which rows and columns have been set. For each query, if the row/column hasn’t been set yet, add its contribution to the answer and mark it as set. Use sets or boolean arrays for efficiency.
#include<vector>#include<unordered_set>usingnamespace std;
classSolution {
public:longlong matrixSumQueries(int n, vector<vector<int>>& queries) {
unordered_set<int> rows, cols;
longlong res =0;
for (int i = queries.size()-1; i >=0; --i) {
int t = queries[i][0], idx = queries[i][1], val = queries[i][2];
if (t ==0) {
if (rows.count(idx)) continue;
res +=1LL* val * (n - cols.size());
rows.insert(idx);
} else {
if (cols.count(idx)) continue;
res +=1LL* val * (n - rows.size());
cols.insert(idx);
}
}
return res;
}
};
import java.util.*;
classSolution {
publiclongmatrixSumQueries(int n, int[][] queries) {
Set<Integer> rows =new HashSet<>(), cols =new HashSet<>();
long res = 0;
for (int i = queries.length-1; i >= 0; --i) {
int t = queries[i][0], idx = queries[i][1], val = queries[i][2];
if (t == 0) {
if (rows.contains(idx)) continue;
res += 1L * val * (n - cols.size());
rows.add(idx);
} else {
if (cols.contains(idx)) continue;
res += 1L * val * (n - rows.size());
cols.add(idx);
}
}
return res;
}
}
classSolution {
funmatrixSumQueries(n: Int, queries: Array<IntArray>): Long {
val rows = mutableSetOf<Int>()
val cols = mutableSetOf<Int>()
var res = 0Lfor (i in queries.indices.reversed()) {
val(t, idx, val_) = queries[i]
if (t ==0) {
if (rows.contains(idx)) continue res += val_ * (n - cols.size)
rows.add(idx)
} else {
if (cols.contains(idx)) continue res += val_ * (n - rows.size)
cols.add(idx)
}
}
return res
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
classSolution:
defmatrixSumQueries(self, n: int, queries: list[list[int]]) -> int:
rows, cols = set(), set()
res =0for t, idx, val in reversed(queries):
if t ==0:
if idx in rows: continue res += val * (n - len(cols))
rows.add(idx)
else:
if idx in cols: continue res += val * (n - len(rows))
cols.add(idx)
return res
use std::collections::HashSet;
impl Solution {
pubfnmatrix_sum_queries(n: i32, queries: Vec<Vec<i32>>) -> i64 {
letmut rows = HashSet::new();
letmut cols = HashSet::new();
letmut res =0i64;
for q in queries.iter().rev() {
let t = q[0]; let idx = q[1]; let val = q[2];
if t ==0 {
if rows.contains(&idx) { continue; }
res += val asi64* (n - cols.len() asi32) asi64;
rows.insert(idx);
} else {
if cols.contains(&idx) { continue; }
res += val asi64* (n - rows.len() asi32) asi64;
cols.insert(idx);
}
}
res
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
functionmatrixSumQueries(n: number, queries: number[][]):number {
constrows=newSet<number>(), cols=newSet<number>();
letres=0;
for (leti=queries.length-1; i>=0; --i) {
const [t, idx, val] =queries[i];
if (t===0) {
if (rows.has(idx)) continue;
res+=val* (n-cols.size);
rows.add(idx);
} else {
if (cols.has(idx)) continue;
res+=val* (n-rows.size);
cols.add(idx);
}
}
returnres;
}