该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
你有一个数列 a,其中 1∼n 各出现了一次。
当你任意选一对 1≤l≤r≤n,并将 al,al+1,…,ar 排成一行,你就得到了 a 的一个子串,记为 al∼r,称 l 为左端点,r 为右端点。
你需要把 a 所有子串按字典序从小到大排序。但是为了避免输出量过大,我会给出 q 个问题,每次给出一个 k,求字典序第 k 小的子串左右端点。
如果你不知道什么是字典序,看这里:
对于两个数列 p,q,称 p 的字典序小于 q(记为 p<q),当且仅当存在自然数 k 使 p,q 的前 k 个数相同且 pk+1<qk+1。
特别地,若 p 是 q 的前缀且 p=q,也认为 p 的字典序小于 q。
例如:
- [1,2]<[3,2](当 k=0)
- [3,1,100]<[3,2,1](当 k=1)
- [3,4]<[3,4,6](p 是 q 前缀)
输入格式
输入的第一行有两个正整数 n,q 表示序列长度和询问个数。
第二行有 n 个正整数 a1,a2,…,an,表示这个数列。
之后有 q 行,每行有一个正整数 k,表示要求的子串的排名。
输出格式
对于每个问题,输出一行两个整数 l,r,表示字典序第 k 小的子串是 al∼r。
样例
3 6
3 1 2
1
2
3
4
5
6
2 2
2 3
3 3
1 1
1 2
1 3
样例 1 解释
数列 3,1,2 共有 6 个子串,从小到大排序的结果为:[1],[1,2],[2],[3],[3,1],[3,1,2]。
50 25
42 22 27 8 44 11 14 31 37 10 48 15 12 40 13 4 25 9 19 5 2 18 6 1 32 3 38 33 43 34 46 47 23 35 21 20 45 39 50 7 36 17 24 29 16 30 49 26 28 41
1178
991
755
1094
689
132
671
635
421
659
448
334
327
213
1206
453
1160
583
388
781
150
692
23
1162
62
37 48
27 44
3 28
1 46
43 47
20 34
33 37
2 19
15 44
2 43
7 27
6 31
6 24
4 29
32 37
7 32
5 44
19 47
13 47
44 45
23 24
43 50
24 46
5 46
26 30
数据范围
| 测试点编号 |
n≤ |
q≤ |
特殊性质 |
| 1∼3 |
200 |
|
| 4∼7 |
1000 |
3×105 |
| 8∼9 |
3000 |
| 10∼13 |
3×105 |
10 |
| 14∼15 |
3×105 |
ai=i |
| 16∼20 |
|
对于全体数据,保证 1≤n,q≤3×105,1≤k≤2n(n+1),ai 中 1∼n 各有一个,输入皆为整数。