给出以下形式的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
答案 0 :(得分:0)
这是一个竞争性的编程问题,对于我来说现在还为时过早,但是我可以尝试给出一些指示。
如果要显式存储整个数组,显然会耗尽内存。但是,您可以利用数组的结构来存储每个条目出现在数组中的次数。因此,如果您得到查询
1 3 5
然后,您将存储对(3,5),而不是存储[3,3,3],表示数字3在列表中5次。
您可以很容易地构建它,也许可以作为更新的成对整数的向量。
剩下的任务是实现2查询,您可以在其中按元素索引找到元素。我们选择的结构的一个副作用是您不能直接索引到成对的整数对,因为该列表中的索引与假设数组中的索引不匹配。我们可以从开始就一直累加向量中每个条目的大小,直到我们达到所需的索引为止,但是到目前为止,我们处理的查询数量为O(n ^ 2)……可能太慢了。取而代之的是,我们可能想要一些可更新的数据结构以获取前缀和-可能如this answer中所述。