数据结构可处理大型数组上的众多查询

时间:2018-11-06 19:52:46

标签: data-structures

给出以下形式的q个查询。有一个列表。

1 x y:将数字x添加到列表y次。

2 n:找到排序列表的第n个数字

约束

1 <= q <= 5 * 100000

1 <= x,y <= 1000000000

1 <= n <列表长度

样本。 输入

4

1 3 6

1 5 2

2 7

2 4

输出

5

3

1 个答案:

答案 0 :(得分:0)

这是一个竞争性的编程问题,对于我来说现在还为时过早,但是我可以尝试给出一些指示。

如果要显式存储整个数组,显然会耗尽内存。但是,您可以利用数组的结构来存储每个条目出现在数组中的次数。因此,如果您得到查询

1 3 5

然后,您将存储对(3,5),而不是存储[3,3,3],表示数字3在列表中5次。

您可以很容易地构建它,也许可以作为更新的成对整数的向量。

剩下的任务是实现2查询,您可以在其中按元素索引找到元素。我们选择的结构的一个副作用是您不能直接索引到成对的整数对,因为该列表中的索引与假设数组中的索引不匹配。我们可以从开始就一直累加向量中每个条目的大小,直到我们达到所需的索引为止,但是到目前为止,我们处理的查询数量为O(n ^ 2)……可能太慢了。取而代之的是,我们可能想要一些可更新的数据结构以获取前缀和-可能如this answer中所述。

相关问题