P16521 [GKS 2015 #E] Sums of Sums

题目描述

Alice 向她的朋友 Bob 展示了一个包含 $N$ 个正整数的数组,下标从 $1$ 到 $N$。她向 Bob 提出了许多形如“这两个下标之间的数之和是多少?”的查询,但 Bob 太容易地解决了问题。 Alice 取出了她的数组,并找出了它的所有 $N \times (N + 1) / 2$ 个非空子数组。她求出了每个子数组的和,然后将这些值按非递减顺序排序,从而创建了一个新数组,下标从 $1$ 到 $N \times (N + 1) / 2$。例如,对于初始数组 $[2, 3, 2]$,Alice 将生成子数组 $[2], [3], [2], [2, 3], [3, 2]$ 和 $[2, 3, 2]$(注意,例如 $[2, 2]$ **不是** 一个子数组)。然后她取出这些和——$2, 3, 2, 5, 5, 7$——并对它们排序,得到新数组 $[2, 2, 3, 5, 5, 7]$。 Alice 已将初始数组以及 $Q$ 个形如“在新数组中从下标 $L_i$ 到 $R_i$(含)的数之和是多少?”的查询交给了 Bob。现在 Bob 陷入困境了!你能帮他脱困吗?

输入格式

输入的第一行给出测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例以一行包含两个由空格分隔的整数 $N$ 和 $Q$ 开始,分别表示初始数组的元素个数和 Alice 的查询个数。然后,有一行包含 $N$ 个由空格分隔的整数,表示 Alice 初始数组的元素。最后,还有 $Q$ 行,每行包含两个由空格分隔的整数:$L_i$ 和 $R_i$,即第 $i$ 个查询的闭区间下标边界。

输出格式

对于每个测试用例,输出一行 `Case #x:`,其中 $x$ 是测试用例编号(从 $1$ 开始)。然后再输出 $Q$ 行,每行一个整数,表示查询的答案(按询问顺序)。

说明/提示

在样例用例 #1 中,Alice 的新数组将是:$[1, 2, 3, 3, 4, 5, 5, 6, 7, 9, 9, 10, 12, 14, 15]$。 ### 限制 - $1 \le T \le 10$。 - $1 \le Q \le 20$。 - $1 \le \text{初始数组的每个元素} \le 100$。 - $1 \le L_i \le R_i \le N \times (N+1) / 2$。 **小数据集(测试集 1 - 可见)** - $1 \le N \le 10^3$。 **大数据集(测试集 2 - 隐藏)** - $1 \le N \le 200000$。 翻译由 DeepSeek V4 Pro 完成