自問すべきことは、それぞれの比較からどのような情報が得られるかということです。「左上」または「右下」の長方形を削除できます。
「x」で比較すると、探しているものが大きいことがわかります。
XXX...
XXX...
XX × ...
……
……
'x' - チェックされたスペース
'X' - チェックは、これがデータの可能な場所ではないことを示しました
'.' - まだ不明
この情報をスマートな方法で使用して、長方形全体をチェックする必要があります。
中央の列でこのように二分探索を行うとします...
次のような結果が得られます
XXX...
XXX...
XXX...
XXXXXX
...XXX
...XXX
2 つの長方形のスペースは、半分の幅と、場合によっては全高が残っています。この情報で何ができますか?
'.' の結果として得られる 2 つのサブ長方形を繰り返すことをお勧めします。 しかし、今では中央の列を選択する代わりに、中央の行を選択してバイナリ検索を実行します。
したがって、N x M の長方形の実行時間は、T(N, M) = log(N) + T(M/2, N)*2 のようになります。
再帰スタックが列と行のチェックを切り替えるため、インデックスの変更に注意してください。最終的な実行時間 (私は再帰を解いていませんでした) は、T(M, N) = log(M) + log(N) のようなものになるはずです (おそらくこれとまったく同じではありませんが、似ているでしょう)。