2
public int[] gridIllumination(int n, int[][] lamps, int[][] queries) {5
HashMap<Integer, Integer> row = new HashMap<>();6
// 2nd hashmap for column7
HashMap<Integer, Integer> col = new HashMap<>();8
// 3rd hashmap for lower diagonal9
HashMap<Integer, Integer> d1 = new HashMap<>();10
// 4th diagonal for upper diagonal11
HashMap<Integer, Integer> d2 = new HashMap<>();12
// 5th diagonal for cell no meaning lamp is present at this spot13
HashMap<Integer, Integer> cellno = new HashMap<>();15
for (int i = 0; i < lamps.length; i++) {16
// get row and column from lamps array17
int row1 = lamps[i][0];18
int col1 = lamps[i][1];19
// place row in row hashmap20
row.put(row1, row.getOrDefault(row1, 0) + 1);21
// place column in col hashmap22
col.put(col1, col.getOrDefault(col1, 0) + 1);24
d1.put((row1 + col1), d1.getOrDefault((row1 + col1), 0) + 1);26
d2.put((row1 - col1), d2.getOrDefault((row1 - col1), 0) + 1);27
// place cellno in cell no hashmap28
int cell = row1 * n + col1;29
cellno.put(cell, cellno.getOrDefault(cell, 0) + 1);31
// direction array which travels in 8 adjacent direction32
int[][] dir = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}};33
int[] ans = new int[queries.length];34
// process all queries35
for (int i = 0; i < queries.length; i++) {36
int row1 = queries[i][0];37
int col1 = queries[i][1];38
int cell = row1 * n + col1;40
(row.containsKey(row1)41
|| col.containsKey(col1)42
|| d1.containsKey(row1 + col1)43
|| d2.containsKey(row1 - col1)44
|| cellno.containsKey(cell))47
// if query has a bulb48
if (cellno.containsKey(cell)) {50
int val = cellno.get(cell);55
if (row.containsKey(row1)) {56
int rowval = row.get(row1);61
row.put(row1, rowval);66
if (col.containsKey(col1)) {67
int colval = col.get(col1);72
col.put(col1, colval);77
if (d1.containsKey(row1 + col1)) {78
int d1val = d1.get(row1 + col1);81
d1.remove(row1 + col1);83
row.put((row1 + col1), d1val);88
if (d2.containsKey(row1 - col1)) {89
int d2val = d2.get(row1 - col1);92
d2.remove(row1 - col1);94
d2.put((row1 - col1), d2val);98
// moves all 8 direction and remove the illumination99
for (int j = 0; j < dir.length; j++) {100
int rowdash = row1 + dir[j][0];101
int coldash = col1 + dir[j][1];102
int cellno1 = rowdash * n + coldash;103
if (cellno.containsKey(cellno1)) {104
int val = cellno.get(cellno1);106
cellno.remove(cellno1);109
if (row.containsKey(rowdash)) {110
int rowval = row.get(rowdash);115
row.put(rowdash, rowval);120
if (col.containsKey(coldash)) {121
int colval = col.get(coldash);126
col.put(coldash, colval);131
if (d1.containsKey(rowdash + coldash)) {132
int d1val = d1.get(rowdash + coldash);135
d1.remove(rowdash + coldash);137
row.put((rowdash + coldash), d1val);142
if (d2.containsKey(rowdash - coldash)) {143
int d2val = d2.get(rowdash - coldash);146
d2.remove(rowdash - coldash);148
d2.put((rowdash - coldash), d2val);