/**
 * @param {number[][]} grid
 * @return {number}
 */
var maxIncreaseKeepingSkyline = function (grid) {
	const maxRow = [],
		maxCol = []
	let m = grid.length,
		n = grid[0].length,
		blocksAdded = 0

	for (row = 0; row < m; row++) {
		let maxSoFar = 0
		for (col = 0; col < n; col++) {
			curVal = grid[row][col]
			maxSoFar = Math.max(maxSoFar, curVal)
		}
		maxRow.push(maxSoFar)
	}

	for (col = 0; col < n; col++) {
		let maxSoFar = 0
		for (row = 0; row < m; row++) {
			curVal = grid[row][col]
			maxSoFar = Math.max(maxSoFar, curVal)
		}
		maxCol.push(maxSoFar)
	}

	for (row = 0; row < m; row++) {
		for (col = 0; col < n; col++) {
			curVal = grid[row][col]
			newVal = Math.min(maxRow[row], maxCol[col])
			blocksAdded += newVal - curVal
		}
	}

	return blocksAdded
}

const grid = [
	[3, 0, 8, 4],
	[2, 4, 5, 7],
	[9, 2, 6, 3],
	[0, 3, 1, 0],
]
//Test cases
console.log(maxIncreaseKeepingSkyline(grid))