- 715 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:13:16 ]
- 範囲の列を、pより小さい部分とp以上の部分に分ける操作を考えて「値pによる分割」と呼ぶことにする
例えば[1,2][5,7][8,15]を3で分割すると[1,2]と[5,7][8,15]に、 10で分割すると[1,2][5,7][8,10]と[10,15]になる(このように列の分割が範囲そのものの分割を伴うことがある) 範囲の列Sに[start, end]を挿入するには、Sをstartで分割してS1とS2を得、S2をendで分割してS3とS4を得、 S1とS4の間に[start, end]を挟んだものを結果とすればいい Sをpで分割するには、まずS中の範囲でendがpを越えるもののうち一番左にあるものを探す そういうものがなければ、SはSと空列に分割される あれば、それのbeginをpと比較して、それを分割するか全部右側に入れるか決める 多分この手順でいけるけど、これが高速に実行できるようなデータ構造は何があるだろう 2-3 Finger Treesとかならindexとappendとsplitが全部O(log n)だから、O((log n)^2)で挿入できるかな
|

|