给定大小为N的数组A,我们构造一个列表,其中包含A的所有可能子序列的降序。 通过填充零比较两个子阵列B和C,直到两者都具有大小N.然后,我们逐个元素地比较两个子阵列并且一旦观察到差异点就返回。 我们给出了多个查询,其中给定x我们必须找到根据上面给出的顺序排序的第x个子数组中的最大元素。 例如,如果数组A是[3,1,2,4];然后排序的子阵列将是:
[4]
[3,1,2,4]
[3,1,2]
[3,1]
[3]
[2,4]
[2]
[1,2,4]
[1,2]
[1]
x = 3的查询对应于查找子阵列[3,1,2]中的最大元素;所以答案是3。 由于查询的数量很大(大约10 ^ 5),并且数组中的元素数量也可能很大(大约10 ^ 5),我们需要做一些预处理来回答每个查询O(1)或O(log N)或O(sqrt N)时间。我似乎无法弄清楚如何做到这一点。当数组包含唯一元素时,我已经解决了它,但是当数组包含重复时,我们怎么能这样做呢?是否有任何数据结构可以帮助存储所需信息?