我输入的内容是Range[] arr
,其大小为n
,其中Range
为
class Range{
int upper, lower;
Range(int upper,int lower){
this.upper=upper;
this.lower=lower;
}
}
现在,对于q
次查询,我得到一个Range r
作为输入,我必须在arr
中报告从L
到R
的值的数量}(也作为每个查询的输入),其中Range
中的arr
仅在其上限值大于r.upper
且下限小于{{1}时才被视为有效}}
我正在考虑使用合并排序树,但我无法弄清楚如何整合这两个条件。请建议一些数据结构,其结构复杂性以及查询复杂度分别为r.lower
和O(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。