#AT2088. D - Sequence Query

D - Sequence Query

当前没有测试数据。

D - 序列查询

得分:400分

题目描述

我们有一个空序列$A$。
给定$Q$个查询,按顺序处理它们。
每个查询的类型有三种。

  • 1 x:将$x$插入到$A$中。

  • 2 x k:在$A$中不大于等于$x$的元素中,找出第$k$大的值。 ($k$不超过$\bf{5}$)
    如果不大于等于$x$的$A$的元素个数少于$k$,则打印-1

  • 3 x k:在$A$中大于等于$x$的元素中,找出第$k$小的值。 ($k$不超过$\bf{5}$)
    如果大于等于$x$的$A$的元素个数少于$k$,则打印-1

限制

  • $1\leq Q \leq 2\times 10^5$
  • $1\leq x\leq 10^{18}$
  • $1\leq k\leq 5$
  • 输入中的所有值都是整数。

输入

输入以标准输入给出,格式如下:

QQ

query1\text{query}_1

query2\text{query}_2

\vdots

queryQ\text{query}_Q

在第$i$个查询$\text{query}_i$中,首先给出查询类型$c_i$(要么是$1$、$2$、$3$)。
如果$c_i=1$,则还会给出$x$;如果$c_i=2$或$3$,则还会给出$x$和$k$。

换句话说,每个查询以以下三种格式之一给出:

``` $1$ $x$ ``` ``` $2$ $x$ $k$ ``` ``` $3$ $x$ $k$ ```

输出

输出$q$行,其中$q$是满足$c_i=2$或$c_i=3$的查询个数。
第$j$行($1\leq j\leq q$)应该包含第$j$个这样的查询的答案。


11
1 20
1 10
1 30
1 20
3 15 1
3 15 2
3 15 3
3 15 4
2 100 5
1 1
2 100 5
20
20
30
-1
-1
1

处理完$\text{query}_{1,2,3,4}$后,$A=(20,10,30,20)$。

对于$\text{query}_{5,6,7}$,不小于等于$15$的$A$的元素有$(20,30,20)$。
其中第$1$个最小的值是$20$;第$2$个是$20$;第$3$个是$30$。