#CF1967F. 前驱与后继

前驱与后继

F.前驱与后继 Next and Prev

时间限制1515内存限制10241024 兆字节

p1,,pnp_1,\dots,p_n[1,,n][1,\dots,n] 的一个排列。

定义 ppqq-子序列[1,q][1,q] 的一个排列,它的元素在 p1,,pnp_1,\dots,p_n 中的相对顺序保持不变。 也就是说,从 pp 中提取所有不超过 qq 的元素,保持原有顺序,得到的序列就是 ppqq-子序列。

对于一个数组 aa,定义:

  • pre(i)\boldsymbol{pre(i)}:满足 pre(i)<ipre(i) < iapre(i)>aia_{pre(i)} > a_i最大下标;若不存在,令 pre(i)=10100pre(i) = -10^{100}
  • nxt(i)\boldsymbol{nxt(i)}:满足 nxt(i)>inxt(i) > ianxt(i)>aia_{nxt(i)} > a_i最小下标;若不存在,令 nxt(i)=10100nxt(i) = 10^{100}

对于每个 qq(满足 1qn1 \le q \le n),设 a1,,aqa_1,\dots,a_qppqq-子序列。 按照定义计算每个位置 iipre(i)pre(i)nxt(i)nxt(i)

给定若干个询问值 xx,对每个 xx 计算:

i=1qmin(nxt(i)pre(i), x)\sum_{i=1}^q \min(nxt(i)-pre(i),\ x)

输入格式

输入包含多组测试数据。 第一行一个整数 tt1t1041 \le t \le 10^4),表示测试数据组数。

每组测试数据格式如下:

  1. 第一行一个整数 nn1n3×1051 \le n \le 3 \times 10^5),表示排列长度。
  2. 第二行 nn 个整数 p1,,pnp_1,\dots,p_n1pin1 \le p_i \le n),表示初始排列。
  3. 接下来q=1q=1q=nq=n 的顺序,依次给出每个 qq 对应的询问:
    • 一个整数 kk0k1050 \le k \le 10^5),表示该 qq 的询问数量。
    • 一行 kk 个整数 xx1xq1 \le x \le q),表示每个询问的参数。

保证:

  • 所有测试数据的 nn 之和 3×105\le 3 \times 10^5
  • 所有测试数据的 kk 之和 105\le 10^5

输出格式

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


样例输入

1
7
6 1 4 3 2 5 7
1 1
0
1 3
1 2
3 1 2 3
1 3
2 2 6

样例输出

1
9
8
5
10
14
16
14
30

样例解释

  • q=1q=1 时,qq-子序列为 [1][1]pre=[10100]pre = [-10^{100}]nxt=[10100]nxt = [10^{100}]。 答案:min(10100(10100), 1)=1\min(10^{100}-(-10^{100}),\ 1) = 1

  • q=5q=5 时,qq-子序列为 [1,4,3,2,5][1,4,3,2,5]pre=[10100,10100,2,3,10100]pre = [-10^{100},-10^{100},2,3,-10^{100}] nxt=[2,5,5,5,10100]nxt = [2,5,5,5,10^{100}] 询问 x=1x=1 答案为 55x=2x=2 答案为 1010x=3x=3 答案为 1414