数直線があったとします。
タプル型で数直線の範囲を示すもの(a,b)が与えられれてるものとします(a<b)
これがn個与えられてるとして、一番密集している地帯の最大値(つまり、任意の範囲で、n個のうちx個がこの範囲が被っているうちの最大のx)
を求めたいのですが、これはどういう考え方をすればいいんでしょうか?
直感的にやっても正確な数字は求められないし、正確な数字を求めようと思ったら、nの中のm番目の範囲を取り上げたとして、m-1番目で既にT個範囲があったとして、これらを範囲ごとに個数を記録して、更にm個目の範囲で被りがある部分、ない部分を判定して更に細かく切り刻まなければいけない、と言う相当ややこしい場合分けになることが目に見えています。
nが1000になる事もあるので、こう言うことをしていたらタイムオーバーになる可能性も大いにあると思います。
ある程度目星をつけて大枠で絞り込むと言う方法も考えたのですが(例えば今わかっている最大の密集地帯の中から任意のdをとって、それを残ってる全ての範囲で確かめていく)などですが、とてもじゃないですがこのやり方では解けないはずです。
範囲の1点でも交わっていればその地点は交わっていると数えるので、例えば大枠の範囲を定めて、そこで数直線上の整数一個一個確かめて、と言うやり方もうまくいかないと思います。
解き方の見当が全くつかないです。
知恵をお貸しください
[追記]
一応自分が試したことの考え方のみを載せると、全く関わりを持たない独立した範囲の集合に分割はしました。
ただやっぱりその先でそれぞれの範囲ごとに切り刻んでいかなければいけないと思って、手が止まってしまっています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/17 04:29
2018/12/17 05:10