题目描述
给定一个含有 n 个数的序列 a1,a2…an,需要支持两种操作:
Q l r k
表示查询下标在区间 [l,r] 中的第 k 小的数
C x y
表示将 ax 改为 y
输入格式
第一行两个正整数 n,m,表示序列长度与操作个数。
第二行 n 个整数,表示 a1,a2…an。
接下来 m 行,每行表示一个操作,都为上述两种中的一个。
输出格式
对于每一次询问,输出一行一个整数表示答案。
样例
5 3
3 2 1 4 7
Q 1 4 3
C 2 6
Q 2 5 3
3
6
数据范围
- 对于 10% 的数据,1≤n,m≤100
- 对于 20% 的数据,1≤n,m≤1000
- 对于 50% 的数据,1≤n,m≤104
- 对于 100% 的数据,1≤n,m≤105,1≤l≤r≤n,1≤k≤r−l+1,1≤x≤n,0≤ai,y≤109
请注意常数优化,但写法正常的整体二分和树套树都可以以大约 1000ms 每个点的时间通过。
来源
- bzoj1901
- 洛谷P2617
- 算法竞赛进阶指南