|
|
1
2
我刚刚将迭代器生成包装在for循环中,并构建了一个迭代器函数数组。
|
|
|
2
2
如果要迭代所有与搜索范围重叠的值,则不需要二进制搜索。
首先,检查我们是否有
迭代器本身是一个保持以下状态的闭包:
如果没有更多的目标范围,或者没有搜索范围,我们就完成了。
什么时候
否则,我们需要确定下一个目标范围是否与任何搜索范围重叠。然而,如果
现在测试重叠是很简单的。对于不相交的搜索范围,我们忽略并继续。否则,我们将在重叠中找到最左边的点并从那里迭代。
举一个类似于你问题中的例子
其带内部点的输出被省略 got 1 [...] got 200 got 40 [...] got 60 got 50 [...] got 300 got 50 [...] got 60 got 250 [...] got 260 |
|
|
3
0
将其拆分为两个函数,一个外部函数在范围内循环,并调用一个内部函数,该函数实现传统的二进制切分。 |
|
|
4
0
警告:一个非常C++的偏颇答案: 您需要做的是定义一种新类型的迭代器,它是一对普通迭代器和一对segment迭代器(如果您没有段迭代器,它是一对指向段的常量指针/ref,以及指向正确段的索引)。您必须定义随机访问迭代器的所有概念(差分、整数加法等)。请记住,至少在C++ LIGO中,这不是一个真正的随机迭代器,因为增加一个整数不是真正的常数时间;这就是生活。 |