【发布时间】:2013-02-23 19:23:31
【问题描述】:
假设有一个包含 N 个整数的大数组:
const unsigned N = 1e12;
int array[N] = { 1, 3 , 8, -5, 4, 3, -1 -6, 6, ....., N};
应该多次查询不同ij范围内的最小元素。返回最小值的复杂度应该小于 O(j-i) 并且应该使用少于 O(N^2) 的内存来解决问题。
如何做到这一点?
【问题讨论】:
-
类型(i,j)的范围数实际上是O(n2),那么怎么可能得到所有的最小值(i ,j) 范围小于那个范围?
-
这个问题被命名为Range Minimum Query。您可以在相应维基百科页面的“外部链接”中找到几种可能的解决方案。
-
您只能询问 30 个范围。并且应该通过对给定范围执行线性步数来返回 nat。
-
Evgeny,这个问题真的叫RMQ,但维基百科页面对我没有帮助。所以我在这里。
-
将元素放在
std::set中没有帮助吗?
标签: c++ algorithm complexity-theory minimum