CF2009G3 Yunli's Subarray Queries (extreme version)

题目描述

这是问题的极限版本。在这个版本中,每个查询的输出与简单版和困难版不同。保证对于所有的查询都有 $ r \geq l+k-1 $。 对于一个任意数组 $ b $,云莉可以无数次进行以下操作: - 选择一个下标 $ i $,将 $ b_i $ 设置为任意她想要的整数 $ x $($ x $ 不限制在 $ [1, n] $ 区间内)。 定义 $ f(b) $ 为所需的最小操作次数,以使得 $ b $ 中存在一个长度至少为 $ k $ 的连续子数组。 云莉给出一个大小为 $ n $ 的数组 $ a $ 并询问你 $ q $ 次,你需要在每次查询中计算并输出 $\sum_{i=l}^{r-k+1} \sum_{j=i+k-1}^{r} f([a_i, a_{i+1}, \ldots, a_j])$。 如果数组中存在从下标 $ i $ 开始的长度为 $ k $ 的连续子数组($ 1 \leq i \leq |b|-k+1 $),那么在该子数组中,对于 $ i < j \leq i+k-1 $,必须满足 $ b_j = b_{j-1} + 1 $。

输入格式

第一行输入 $ t $($ 1 \leq t \leq 10^4 $)—— 表示测试用例的数量。 接下来的每个测试用例的第一行包含三个整数 $ n $、$ k $ 和 $ q $($ 1 \leq k \leq n \leq 2 \cdot 10^5 $,$ 1 \leq q \leq 2 \cdot 10^5 $),分别表示数组的长度、连续子数组的长度和查询的次数。 接下来是一行,包含 $ n $ 个整数 $ a_1, a_2, \ldots, a_n $($ 1 \leq a_i \leq n $)。 接下来的 $ q $ 行中,每行包含两个整数 $ l $ 和 $ r $($ 1 \leq l \leq r \leq n $,$ r \geq l+k-1 $),表示查询的区间。 保证所有测试用例中 $ n $ 的总和不超过 $ 2 \cdot 10^5 $,所有测试用例中 $ q $ 的总和不超过 $ 2 \cdot 10^5 $。

输出格式

对于每个查询,输出一行结果,即 $\sum_{i=l}^{r-k+1} \sum_{j=i+k-1}^{r} f([a_i, a_{i+1}, \ldots, a_j])$。

说明/提示

在第一个测试用例的第一个查询中,我们可以通过如下方法来计算结果: - 当 $ i = 4 $ 且 $ j = 5 $ 时,$ f([2, 1])=1 $,因为云莉可以将 $ b_2 $ 设为 3,从而一步操作后形成长度为 2 的连续子数组。 - 当 $ i = 4 $ 且 $ j = 6 $ 时,$ f([2, 1, 2])=0 $,因为已经存在长度为 2 的连续子数组。 - 当 $ i = 5 $ 且 $ j = 6 $ 时,$ f([1, 2])=0 $,因为已经存在长度为 2 的连续子数组。 此查询的答案为 $ 1+0+0=1 $。 **本翻译由 AI 自动生成**