http://acm.hdu.edu.cn/showproblem.php?pid=2665
题目大意
静态区间第 k 小数
给定一个长度为 n 的序列 A,你需要回答 q 次询问。每次询问给定
l; r; k,你需要回答 A 序列 [l; r] 区间内第 k 小的数字。
n; q ≤ 105; 1 ≤ k ≤ r − l + 1; 1 ≤ l ≤ r ≤ n; jAij ≤ 109
思路
- 我们对于每个前缀 i,求出包含 A1; A2; ; Ai 所有元素的权值线段树。
- 询问时只需要在线段树上二分最大的位置 v,使得 Al; Al+1; Ar 区间
内 ≤ v 的个数 ≤ k 即可。 - 时间复杂度均为 O((n + q) log n),空间复杂度为 O(n log n)。
solution
- 对于每一个时刻,都建一颗线段树,只不过我们可以充分运用之前已有的线段树,我们发现每加一个数,都仅仅只修改了logn个点的信息。所以“ls[y]=ls[x];rs[y]=rs[x]”.
- 查询的时候,因为每一个线段树都是同构的,所以对应节点减一下就是新线段树,在此线段树二分找kth即可
- t[i]的意义&#