CF2009G2.Yunli's Subarray Queries (hard version)
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是问题的困难版本。在此版本中,保证所有查询的 r≥l+k−1。
对于任意数组 b,Yunli 可以执行以下操作任意次数:
- 选择一个索引 i。设置 bi=x,其中 x 是她想要的任何整数(x 不限于区间 [1,n])。
将 f(b) 表示为她需要执行的最小操作数,直到 b 中存在长度至少为 k 的连续子数组*。
Yunli 收到一个大小为 n 的数组 a,并询问 q 次。在每次查询中,你需要计算 ∑j=l+k−1rf([al,al+1,…,aj])。
* 如果存在一个长度为 k 的连续子数组,从索引 i 开始(1≤i≤∣b∣−k+1),那么对于所有 i<j≤i+k−1,bj=bj−1+1。
输入格式
第一行包含 t(1≤t≤104)——测试用例的数量。
每个测试用例的第一行包含三个整数 n、k 和 q(1≤k≤n≤2⋅105,1≤2⋅105)——数组的长度、连续子数组的长度和查询次数。
下一行包含 n 个整数 a1,a2,…,an(1≤ai≤n)。
以下 q 行包含两个整数 l 和 r(1≤l≤r≤n,r≥l+k−1)——查询的边界。
保证所有测试用例中 n 的总和不超过 2⋅105,所有测试用例的 q 总和不超过 2⋅105。
输出格式
对于每组测试数据上的每次查询,输出 ∑j=l+k−1rf([al,al+1,…,aj])。
输入输出样例
输入#1
3 7 5 3 1 2 3 2 1 2 3 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
输出#1
6 5 2 2 5 2 3
说明/提示
在第一组测试用例的第二次查询中,我们计算了以下函数值:
- f([2,3,2,1,2])=3,因为 Yunli 可以设置 b3=4、b4=5 和 b5=6,从而在 3 次操作中形成一个大小为 5 的连续子阵列。
- f([2,3,2,1,2,3])=2,因为我们可以设置 b3=0 和 b2=−1,在 2 次操作中中(从位置 2 开始)形成一个大小为5的连续子阵列。
这个查询的答案是 3+2=5。
翻译 @Cure_Wing。
输入解题思路,AI测评打分。不知道怎么写?