各 Ai(1≤i≤N)A_i \lparen 1 \leq i \leq N \rparen Ai(1≤i≤N) に対して Ai−r≤Bk<AiA_i-r \leq B_k < A_iAi−r≤Bk<Aiを満たす kkk が存在することが判定できればよいです。 二分探索によって配列 BBB から Ai−rA_i-rAi−r 以上の最小の値を求め、それが AiA_iAi 未満であれば敵の体力を減らし、そうでなければプレイヤーの体力を減らすことで、 全体では O(NlogM)O(N \log M)O(NlogM) で解を求めることができるため、十分高速です。