测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A6904. 序列查询

编程题 普及/提高-
知识点

题目描述

有一个一开始为空的序列 $序列A$(可以理解成一个“袋子”,里面的数允许重复)。

一共有 $Q$ 次操作,每次操作是下面三种之一:

1. $1\ x$:把数字 $x$ 放进 $序列A$ 里(插入一个 $x$)。
2. $2\ x\ k$:只看 $序列A$ 里所有满足 $\le x$ 的数字,把它们从大到小排好,输出第 $k$ 个(第 $k$ 大)。如果不够 $k$ 个,输出 $-1$。
3. $3\ x\ k$:只看 $序列A$ 里所有满足 $\ge x$ 的数字,把它们从小到大排好,输出第 $k$ 个(第 $k$ 小)。如果不够 $k$ 个,输出 $-1$。

输入格式

第一行一个整数 $Q$。
接下来 $Q$ 行,每行是一次操作(格式如上)。

输出格式

遇到操作 $2$ 或 $3$ 时,输出一行答案。

输入输出样例

输入 #1
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
输出 #1
20
20
30
-1
-1
1

说明/提示

## 数据范围

- $1\le Q\le 2\times 10^5$
- $1\le x\le 10^{18}$
- $1\le k\le 5$

## 样例解释

前 $4$ 次插入后,$序列A$ 里有:$[20,10,30,20]$。

接下来做 $3\ 15\ k$:只看 $\ge 15$ 的数,就是 $[20,30,20]$。
把它从小到大排成数组 $B$:$B=[20,20,30]$(下标从 $1$ 开始)

- $3\ 15\ 1$:要第 $1$ 小,$B_1=20$
- $3\ 15\ 2$:要第 $2$ 小,$B_2=20$
- $3\ 15\ 3$:要第 $3$ 小,$B_3=30$
- $3\ 15\ 4$:要第 $4$ 小,但 $B$ 只有 $3$ 个数,所以输出 $-1$

再做 $2\ 100\ 5$:只看 $\le 100$ 的数,其实就是全部 $[20,10,30,20]$。
从大到小排成 $C=[30,20,20,10]$,只有 $4$ 个数,要第 $5$ 大,不存在,所以输出 $-1$。

然后插入 $1$,现在 $序列A=[20,10,30,20,1]$。
再次做 $2\ 100\ 5$:从大到小排成 $C=[30,20,20,10,1]$,第 $5$ 大是 $C_5=1$,所以输出 $1$。
上一题 去做题 下一题