我曾踏足山巅,也曾进入低谷,二者都让我受益良多。
n 座山从高到低排成了一条直线,这就是进入低谷的路;不过,现在并不是进入低谷的时候,你可以改变山的高度!!!
在每次操作中:
在任何时间,任何地点都有可能陷入低谷。所以请问,在给定 k 的情况下,对于山的某个区间 l 到 r 来说,使得这个区间内的所有山的高度单调不减的操作次数最少是多少。
形式化地来说,给你一个长度为 n 的单调不增序列 a,在每次操作中,你可以选择一个位置 i(1≤i≤n),使得 ai=ai×k。那么在给定 k 的情况下,使得序列 a 的某个子段 [al,…,ar] 单调不减的操作次数最小值是多少。
第一行,一个整数 t(1≤t≤104),代表数据组数。
对于每组数据:
第一行,三个整数 n,q,b(2≤n≤5⋅105;1≤q≤5⋅105;1≤b≤106),代表直线上山的数量,询问次数和表示山的高度时的基数。
接下来一行有 n 个整数 x1,…,xn(0≤xi≤n),代表初始时第 i 座山的高度 ai=bxi,保证所有山的高度数组 a 是单调不增的。
接下来连续的 q 行,每行三个整数 l,r,k(1≤l<r≤n;2≤k≤109),代表每次询问的区间范围和询问时的 k。
保证同一测试点内 n 的总和和 q 的总和均不超过 5⋅105。
对于每次询问,输出一行整数代表使得当前区间内山的高度数组变得单调不减的最少操作次数。
因为本题可能存在一定的精度问题,所以允许选手的答案和标准答案之间有 10−5 的相对误差,即假如标准答案为 ans,选手输出为 out,那么选手的输出会被认为是正确的当且仅当 ans∣ans−out∣≤10−5。
输入样例
4
4 2 1
1 3 0 4
1 4 2
2 3 71
2 1 2
1 1
1 2 273
10 6 2
10 10 8 6 2 1 1 1 0 0
1 10 2
1 2 998244353
3 7 4
2 5 31
2 10 33
2 3 12
7 4 99787
6 5 4 3 2 1 0
1 7 2
1 7 99788
1 7 99787
2 6 99786
输出样例
0
0
0
61
0
12
6
28
1
357
21
21
20