查找给定输入范围的重叠范围数

时间:2017-03-27 16:15:58

标签: algorithm data-structures tree segment

我输入的内容是Range[] arr,其大小为n,其中Range

class Range{
    int upper, lower;
    Range(int upper,int lower){
        this.upper=upper;
        this.lower=lower;
    }

}

现在,对于q次查询,我得到一个Range r作为输入,我必须在arr中报告从LR的值的数量}(也作为每个查询的输入),其中Range中的arr仅在其上限值大于r.upper且下限小于{{1}时才被视为有效}}

我正在考虑使用合并排序树,但我无法弄清楚如何整合这两个条件。请建议一些数据结构,其结构复杂性以及查询复杂度分别为r.lowerO(n.log n)

此外,应该注意的是,只考虑特定段内的范围,也作为输入给出。

PS:对合并排序树或分段树的某些修改似乎很可能,因此欢迎使用合并排序树或分段树的任何答案。

编辑: R [] = {{3,7},{5,9},{2,10},{4,10},{3,5}}

查询#1:{4,6},l = 2,r = 5

这里考虑的范围是{5,9},{2,10},{4,10},{3,5}

其中只有{5,9},{2,10},{4,10}有效。 所以这个查询的答案是3。

0 个答案:

没有答案