CF2009G3.Yunli's Subarray Queries (extreme version)
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是问题的极限版本。在这个版本中,每个查询的输出与简单版和困难版不同。保证对于所有的查询都有 $ r \geq l+k-1 $。
对于一个任意数组 $ b $,云莉可以无数次进行以下操作:
- 选择一个下标 $ i $,将 $ b_i $ 设置为任意她想要的整数 $ x ( x $ 不限制在 $ [1, n] $ 区间内)。
定义 $ f(b) $ 为所需的最小操作次数,以使得 $ b $ 中存在一个长度至少为 $ k $ 的连续子数组。
云莉给出一个大小为 $ n $ 的数组 $ a $ 并询问你 $ q $ 次,你需要在每次查询中计算并输出 ∑i=lr−k+1∑j=i+k−1rf([ai,ai+1,…,aj])。
如果数组中存在从下标 $ 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 $。
输出格式
对于每个查询,输出一行结果,即 ∑i=lr−k+1∑j=i+k−1rf([ai,ai+1,…,aj])。
输入输出样例
输入#1
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
1 3 3 3 2 7 2 4 8 6 28 7 16 20 32 19 18 15 26 9
说明/提示
在第一个测试用例的第一个查询中,我们可以通过如下方法来计算结果:
- 当 $ 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 自动生成
输入解题思路,AI测评打分。不知道怎么写?