我试图解决this问题。
我找到tutorial来解决这个问题,但是我还没有得到如何构建段树,它会在O(log n)中找到小于x的数字(x可以更改)。在教程中它已被省略。
任何人都可以解释我该怎么做吗?
答案 0 :(得分:5)
这很简单:
将所有数字的排序数组存储在特定节点所覆盖的范围内(O(n * log n)
内存和初始化时间)。
要回答查询,请将查询段分解为O(log n)
个节点(与标准最小/最大/总和段树相同)并对存储在其中的数组执行二进制搜索每个节点找到小于x
的元素数。它为每个查询提供O(log^2 n)
个时间。您也可以使用小数级联来实现O(log n)
,但这不是必需的。