题目描述
很久以前,小 M 和他的朋友小 N 一起筹备了一场编程比赛。他们一共拟出了 n 道题目,编号为 1∼n,其中第 i (1≤i≤n) 道题目的质量为非负整数 ai。
时光飞逝。如今,小 M 不再是信息学奥林匹克竞赛的选手,但他们曾约定要一起举办一系列的比赛。
小 M 并没有忘记这件事。
现在,小 M 希望将这 n 道题分成若干次训练赛,即将这 n 道题划分为若干个连续区间。题目的划分方案可以用一列整数表示:0=r0<r1<r2<⋯<rk=n,表示将会有 k 次训练赛,第 i 次训练赛将包含所有编号在 (ri−1+1) 到 ri(两端都包含)的题目。
此外,小 M 希望给参赛选手提供尽可能好的比赛。小 M 观察到,一场比赛的质量是由其最好的题和最后一个题共同决定的。所以他规定:一场训练赛的质量为其所包含题目 ai 的最大值和所包含编号最大的题目的 ai 的乘积。
小 M 还没有决定比赛的场数,目前只有 q 个候选值 k1,k2,…,kq。小 M 想知道,对于每个 1≤j≤q,在所有的划分题目至恰好 kj 场训练赛的方式中,所有训练赛的质量总和最大是多少。
输入格式
从标准输入读入数据。
本题包含多组测试数据。
输入的第一行包含一个正整数 t,表示测试数据组数。
接下来依次输入每组测试数据,对于每组测试数据:
- 第一行包含两个正整数 n,q。
- 第二行包含 n 个非负整数 a1,a2,…,an。
- 第三行包含 q 个正整数 k1,k2,…,kq。
输出格式
输出到标准输出。
对于每组测试数据,输出一行 q 个非负整数,其中第 j (1≤j≤q) 个非负整数表示在所有的划分题目至恰好 kj 场训练赛的方式中,所有训练赛的质量总和的最大值。
2
4 3
3 2 4 1
3 1 4
5 5
10 3 16 8 7
1 2 3 4 5
26 4 30
112 312 412 469 478
子任务
对于所有测试数据,均有:
- 1≤n,∑n≤5×105,1≤q,∑q≤105;
- 对于所有 1≤i≤n,均有 0≤ai≤106;
- 对于所有 1≤j≤q,均有 1≤kj≤n。
| 子任务编号 |
分值 |
∑n≤ |
∑q≤ |
特殊性质 |
| 1 |
10 |
300 |
300 |
无 |
| 2 |
20 |
3000 |
3000 |
| 3 |
10 |
105 |
10 |
| 4 |
30 |
105 |
| 5 |
10 |
5×105 |
an=0 |
| 6 |
20 |
无 |