区间第K值带修改
Q:给定一个序列 1、查询一个L到R的区间内的第K大(小)值。2、修改一个值。
这道神题困扰了我很久,直到学了各种各样的算法才会这道题。
先比较一下流行的算法的效率吧
对于一个长度为N的序列
---------------------------------------------------
暴力:对于一段查询区间每次进行快排。
时间复杂度:
单次查询:O(NlogN)
修改:O(1)
空间复杂度:O(N)
----------------------------------------------------
线段树套平衡树:
单次查询:O(log^3 N)
修改:O(log^2 N)
空间复杂度:O(N^2logn)
-----------------------------------------------------
主席树(函数式线段树):
单次询问:O(log^2 N)
修改:O(log^2 N)
空间复杂度:???
---------------------------------------