2つの範囲の重なり判定を、より簡潔なコードで書くことがポイントになります。
「重なる」の反対である「重ならない」条件の方がより簡潔に書くことができ、以下の2通りになります。
以上の条件から、2つの範囲(a, b)と(c, d)の重なり判定の関数は以下のように書くことができます。
bool overlap(int a, int b, int c, int d){ if ( d <= a ) return false; // (c, d)の終点が(a, b)の始点よりも前にある if ( b <= c ) return false; // (c, d)の始点が(a, b)の終点よりも後にある return true; }