考え方
$i$軸のうち,どの$j$座標にもルークが含まれないのは1つだけである.したがって,「$(A, B, 1, N)$を聞いたときに$B - A - 1$が帰って来ること」が「$A \leq X \leq B$」の必要十分条件である.よって,二分探索で$X$を求めることができる.同様に,「$(1, N, C, D)$を聞いたときに$D - C - 1$が帰って来ること」が「$C \leq Y \leq D$」の必要十分条件である.
回答例
N = int(input()) A, B = 1, N while B - A > 0: mid = (A + B) // 2 print(f'? {A} {mid} 1 {N}') T = int(input()) if T == -1: raise RuntimeError('') if T < mid - A + 1: B = mid else: A = mid + 1 C, D = 1, N while D - C > 0: mid = (C + D) // 2 print(f'? 1 {N} {C} {mid}') T = int(input()) if T == -1: raise RuntimeError('') if T < mid - C + 1: D = mid else: C = mid + 1 exit(print(f'! {A} {C}'))