如何在分区间隔中获取值所属的分区?

时间:2011-10-07 17:49:32

标签: c++ std

我的间隔被分成大量较小的分区。

没有任何空格,也没有任何重叠的间隔。

例如:(0;600)分为:

  1. (0;10>
  2. (10;25>
  3. (25;100>
  4. (100;125>
  5. (125;550>
  6. (550;600)
  7. 现在我有大量的值,我需要获得每个值的分区ID。 我可以存储将此区间划分为更小间隔的值数组。 但如果所有值都属于最后一个分区,则需要通过整个数组。

    所以我正在寻找存储这些间隔的更好的解决方案。我想简单 - max cca 150行长度算法,我不想使用除std。

    之外的任何库

2 个答案:

答案 0 :(得分:5)

由于分区中没有“空格”,因此每个分区的末尾都是冗余的(它与下一个分区的开头相同)。

由于您对分区列表进行了排序,因此您只需使用std::upper_bound二进制搜索。

<强> See it in action

修改:更正(upper_bound,而非lower_bound)。

答案 1 :(得分:1)

您可以改进搜索算法。

将所有范围放入数组中,然后使用 Binary Search Algorithm 搜索正确的范围。

它将花费O(logn),并且它很容易实现。