/ WHOJ / 题库 /

【模板】可持久化线段树 2

【模板】可持久化线段树 2

题目背景

这是个非常经典的可持久化权值线段树入门题——静态区间第 \(k\) 小。

题目描述

给定 \(n\) 个整数构成的序列 \(a\),将对于指定的闭区间 \([l, r]\) 查询其区间内的第 \(k\) 小值。

格式

输入格式

第一行包含两个整数,分别表示序列的长度 \(n\) 和查询的个数 \(m\)。

第二行包含 \(n\) 个整数,第 \(i\) 个整数表示序列的第 \(i\) 个元素 \(a_i\)。

接下来 \(m\) 行每行包含三个整数 \( l, r, k\) , 表示查询区间 \([l, r]\) 内的第 \(k\) 小值。

输出格式

对于每次询问,输出一行一个整数表示答案。

样例1

样例输入1

5 5
25957 6405 15770 26287 26465 
2 2 1
3 4 1
4 5 1
1 2 2
4 4 1

样例输出1

6405
15770
26287
25957
26287

样例解释

\(n=5\),数列长度为 \(5\),数列从第一项开始依次为\(\{25957, 6405, 15770, 26287, 26465\}\)。

  • 第一次查询为 \([2, 2]\) 区间内的第一小值,即为 \(6405\)。
  • 第二次查询为 \([3, 4]\) 区间内的第一小值,即为 \(15770\)。
  • 第三次查询为 \([4, 5]\) 区间内的第一小值,即为 \(26287\)。
  • 第四次查询为 \([1, 2]\) 区间内的第二小值,即为 \(25957\)。
  • 第五次查询为 \([4, 4]\) 区间内的第一小值,即为 \(26287\)。

限制

  • 对于 \(20\%\) 的数据,满足 \(1 \leq n,m \leq 10\)。
  • 对于 \(50\%\) 的数据,满足 \(1 \leq n,m \leq 10^3\)。
  • 对于 \(80\%\) 的数据,满足 \(1 \leq n,m \leq 10^5\)。
  • 对于 \(100\%\) 的数据,满足 \(1 \leq n,m \leq 2\times 10^5\),\(|a_i| \leq 10^9\),\(1 \leq l \leq r \leq n\),\(1 \leq k \leq r - l + 1\)。