2584 {
2585 auto ls = unordered_set<pair<int, int>, pair_hash>();
2586 auto row = unordered_map<int, int>();
2587 auto col = unordered_map<int, int>();
2588 auto diag_down = unordered_map<int, int>();
2589 auto diag_up = unordered_map<int, int>();
2590 for(auto lamp: lamps) {
2591 int x = lamp[0];
2592 int y = lamp[1];
2593 auto p = make_pair(x, y);
2594 if(!ls.contains(p)) {
2595 ls.insert(p);
2596 row[x]++;
2597 col[y]++;
2598 diag_down[n - x + y]++;
2599 diag_up[x + y]++;
2600 }
2601 }
2602 auto ans = vector<int>();
2603 for(auto query: queries) {
2604 int query_x = query[0];
2605 int query_y = query[1];
2606 if(row[query_x] > 0 || col[query_y] > 0 || diag_down[n - query_x + query_y] > 0 || diag_up[query_x + query_y] > 0) {
2608 } else {
2610 }
2611 pair<int, int> adjacents[9] = {make_pair(query_x + 1, query_y + 1), make_pair(query_x + 1, query_y), make_pair(query_x + 1, query_y - 1),
2612 make_pair(query_x, query_y + 1), make_pair(query_x, query_y), make_pair(query_x, query_y - 1),
2613 make_pair(query_x - 1, query_y + 1), make_pair(query_x - 1, query_y), make_pair(query_x - 1, query_y - 1)};
2614 for(auto adjacent: adjacents) {
2615 if(ls.contains(adjacent)) {
2616 ls.erase(adjacent);
2617 auto [x, y] = adjacent;
2618 row[x]--;
2619 col[y]--;
2620 diag_down[n - x + y]--;
2621 diag_up[x + y]--;
2622 }
2623 }
2624 }
2626 }
vector< vector< int > > ans