# Find the weight at (Xi, Yi) after M operations in a Matrix

Given **n x n** points on cartesian plane, the task is to find the weight at **(x _{i}, y_{j})** after

**m**operation.

**x**denotes the operation of adding weight

_{i}, y_{j}, w**w**at all the points on the lines

**x = x**.

_{i}and y = y_{j}**Examples:**

Input:n = 3, m = 2

0 0 1

1 1 2

x = 1, y = 0

Output:3

Explanation:Initially, weights are

0 0 0

0 0 0

0 0 0

After 1st operation

2 1 1

1 0 0

1 0 0

After 2nd operation

2 3 1

3 4 2

1 0 0

Clearly, weight at (x_{1}, y_{0}) is 3

Input:n = 2, m = 2

0 1 1

1 0 2

x = 1, y = 1

Output:3

**Naive Approach:**

Consider a 2-d array arr[n][n] = {0} and perform the given operations and then, retrieve the weight at **(x _{i}, y_{j})**. This approach will take

**O(n*m)**time.

**Efficient Approach:**

- Consider the arrays arrX[n] = arrY[n] = {0}.
- Redefine the operation x
_{i}, y_{j}, w asarrX[i] += w and arrY[j] += w

- Find weight at (x
_{i}, y_{j}) usingw = arrX[i] + arrY[j]

Below is the implementation of the above approach:

`// C++ program to find the ` `// weight at xi and yi ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to calculate weight at (xFind, yFind) ` `int` `findWeight(vector<vector<` `int` `> >& operations, ` ` ` `int` `n, ` `int` `m, ` ` ` `int` `xFind, ` `int` `yFind) ` `{ ` ` ` `int` `row[n] = { 0 }; ` ` ` `int` `col[n] = { 0 }; ` ` ` ` ` `// Loop to perform operations ` ` ` `for` `(` `int` `i = 0; i < m; i++) { ` ` ` ` ` `// Updating row ` ` ` `row[operations[i][0]] ` ` ` `+= operations[i][2]; ` ` ` ` ` `// Updating column ` ` ` `col[operations[i][0]] ` ` ` `+= operations[i][2]; ` ` ` `} ` ` ` ` ` `// Find weight at (xi, yj) using ` ` ` `// w = arrX[i] + arrY[j] ` ` ` `int` `result = row[xFind] + col[yFind]; ` ` ` ` ` `return` `result; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `vector<vector<` `int` `> > operations ` ` ` `= { ` ` ` `{ 0, 0, 1 }, ` ` ` `{ 1, 1, 2 } ` ` ` `}; ` ` ` `int` `n = 3, ` ` ` `m = operations.size(), ` ` ` `xFind = 1, ` ` ` `yFind = 0; ` ` ` `cout << findWeight(operations, ` ` ` `n, m, xFind, ` ` ` `yFind); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

3

**Time Complexity:** where m is the number of operations

## Recommended Posts:

- Maximum weight path ending at any element of last row in a matrix
- Print matrix after applying increment operations in M ranges
- Minimum operations required to set all elements of binary matrix
- Minimum operations of given type to make all elements of a matrix equal
- Minimum operations required to make each row and column of matrix equals
- Find trace of matrix formed by adding Row-major and Column-major order of same matrix
- Find sub-matrix with the given sum
- Find a sub matrix with maximum XOR
- Find row with maximum sum in a Matrix
- Find the mean vector of a Matrix
- Find if given matrix is Toeplitz or not
- Program to find all types of Matrix
- Program to find transpose of a matrix
- Find single Movement in a Matrix
- Find orientation of a pattern in a matrix

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.