#include <unordered_map>
#include <unordered_set>
#include <map>
#include <vector>
#include <utility>
class Solution {
public:
bool isValidSudoku(std::vector<std::vector<char>>& board) {
std::unordered_map<int, std::unordered_set<char>> rows, cols;
std::map<std::pair<int, int>, std::unordered_set<char>> squares;
for (int i = 0; i < board.size(); i++) {
for (int j = 0; j < board.size(); j++) {
if (board[i][j] == '.') continue;
std::pair<int, int> sqK = { i / 3, j / 3 };
bool eliminationCond = (
(rows[i].count(board[i][j])) ||
(cols[j].count(board[i][j])) ||
(squares[sqK].count(board[i][j]))
);
if (eliminationCond) return false;
rows[i].insert(board[i][j]);
cols[j].insert(board[i][j]);
squares[sqK].insert(board[i][j]);
}
}
return true;
}
};