#CF2009G3. Yunli's Subarray Queries (extreme version)

    ID: 6923 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>数据结构动态规划模拟CodeforcesCodeforces Round 971(Div4)Div4G3CF2009G32700

Yunli's Subarray Queries (extreme version)

题目描述

这是问题的极限版本。在这个版本中,每个查询的输出与简单版和困难版不同。保证对于所有的查询都有 rl+k1 r \geq l+k-1

对于一个任意数组 b b ,云莉可以无数次进行以下操作:

  • 选择一个下标 i i ,将 bi b_i 设置为任意她想要的整数 x x x x 不限制在 [1,n] [1, n] 区间内)。

定义 f(b) f(b) 为所需的最小操作次数,以使得 b b 中存在一个长度至少为 k k 的连续子数组。

云莉给出一个大小为 n n 的数组 a a 并询问你 q q 次,你需要在每次查询中计算并输出 $\sum_{i=l}^{r-k+1} \sum_{j=i+k-1}^{r} f([a_i, a_{i+1}, \ldots, a_j])$。

如果数组中存在从下标 i i 开始的长度为 k k 的连续子数组(1ibk+1 1 \leq i \leq |b|-k+1 ),那么在该子数组中,对于 i<ji+k1 i < j \leq i+k-1 ,必须满足 bj=bj1+1 b_j = b_{j-1} + 1

输入格式

第一行输入 t t 1t104 1 \leq t \leq 10^4 )—— 表示测试用例的数量。

接下来的每个测试用例的第一行包含三个整数 n n k k q q 1kn2105 1 \leq k \leq n \leq 2 \cdot 10^5 1q2105 1 \leq q \leq 2 \cdot 10^5 ),分别表示数组的长度、连续子数组的长度和查询的次数。

接下来是一行,包含 n n 个整数 a1,a2,,an a_1, a_2, \ldots, a_n 1ain 1 \leq a_i \leq n )。

接下来的 q q 行中,每行包含两个整数 l l r r 1lrn 1 \leq l \leq r \leq n rl+k1 r \geq l+k-1 ),表示查询的区间。

保证所有测试用例中 n n 的总和不超过 2105 2 \cdot 10^5 ,所有测试用例中 q q 的总和不超过 2105 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])$。

样例

5
7 2 4
1 2 3 2 1 2 3
4 6
1 7
2 7
3 7
8 4 2
4 3 1 1 2 4 3 2
3 6
1 5
5 4 2
4 5 1 2 3
1 4
1 5
10 4 8
2 3 6 5 8 9 8 10 10 1
2 7
6 10
1 9
1 6
3 9
4 10
2 10
1 8
10 7 4
3 4 5 3 4 5 9 10 8 9
1 9
2 10
1 10
2 9
1
3
3
3
2
7
2
4
8
6
28
7
16
20
32
19
18
15
26
9

样例说明

在第一个测试用例的第一个查询中,我们可以通过如下方法来计算结果:

  • i=4 i = 4 j=5 j = 5 时,f([2,1])=1 f([2, 1])=1 ,因为云莉可以将 b2 b_2 设为 3,从而一步操作后形成长度为 2 的连续子数组。
  • i=4 i = 4 j=6 j = 6 时,f([2,1,2])=0 f([2, 1, 2])=0 ,因为已经存在长度为 2 的连续子数组。
  • i=5 i = 5 j=6 j = 6 时,f([1,2])=0 f([1, 2])=0 ,因为已经存在长度为 2 的连续子数组。

此查询的答案为 1+0+0=1 1+0+0=1

本翻译由 AI 自动生成

来源

Codeforces 2009G3,英文题名 Yunli's Subarray Queries (extreme version)。