diff --git a/2503. Maximum Number of Points From Grid Queries b/2503. Maximum Number of Points From Grid Queries new file mode 100644 index 0000000..180d141 --- /dev/null +++ b/2503. Maximum Number of Points From Grid Queries @@ -0,0 +1,36 @@ +class Solution { + vector> dirs = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}}; +public: + vector maxPoints(vector>& grid, vector& queries) { + int n = grid.size(), m = grid[0].size(), k = queries.size(); + vector> qi; + for (int i = 0; i < k; i++){ + qi.push_back(make_pair(queries[i], i)); + } + sort(qi.begin(), qi.end()); + priority_queue, vector>, greater<>> pq; + vector> visited(n, vector(m, false)); + pq.push(make_tuple(grid[0][0], 0, 0)); + visited[0][0] = true; + vector res(k, 0); + int count = 0; + for (auto& q : qi){ + int limit = q.first, idx = q.second; + while (!pq.empty() && get<0>(pq.top()) < limit){ + tuple cur = pq.top(); + pq.pop(); + int wei = get<0>(cur), row = get<1>(cur), col = get<2>(cur); + count++; + for (auto& dir : dirs){ + int dr = dir.first + row, dc = dir.second + col; + if (dr >= 0 && dr < n && dc >= 0 && dc < m && !visited[dr][dc]){ + visited[dr][dc] = true; + pq.push(make_tuple(grid[dr][dc], dr, dc)); + } + } + } + res[idx] = count; + } + return res; + } +};