U644824 简单的平衡树问题

题目描述

给你一个长度为 $n$ 的数列 $a_1, a_2, \ldots, a_n$。 接下来有 $q$ 次操作,操作分为如下种类型: - `1 p x`:将 $a_p$ 修改为 $x$; - `2 x`:查询 $x$ 在数列 $a$ 中的排名(数据保证 $x$ 肯定存在,$x$ 的排名定义为数列 $a$ 中比 $x$ 小的数字个数 $+ 1$) - `3 k`:查询排名第 $k$ 的那个数(排名第 $k$ 的那个数指数列 $a$ 从小到大排序后排在第 $k$ 位的那个数) - `4 x`:查询 $x$ 的前驱,即数列 $a$ 中小于 $x$ 的数中最大的那个数,如果没有这样的数则前驱 $= - 1$ - `5 x`:查询 $x$ 的后继,即数列 $a$ 中大于 $x$ 的数中最小的那个数,如果没有这样的数则后继 $= -1$

输入格式

第一行,两个整数 $n$ 和 $q$,分别表示数列长度以及操作次数。 第二行,$n$ 个整数 $a_1, a_2, \ldots, a_n$,以空格分隔。 接下来 $q$ 行,每行包含一个操作。

输出格式

对于每次查询操作,输出一行,包含一个整数,表达式答案。

说明/提示

#### 数据规模与约定 - 对于 $100\%$ 的数据,$1 \le n,q \le 2 \cdot 10^5$,$1 \le a_i,x \le 10^9$,$1 \le p,k \le n$