#CF2009G2. Yunli's Subarray Queries (hard version)

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

Yunli's Subarray Queries (hard version)

题目描述

这是问题的困难版本。在此版本中,保证所有查询的 rl+k1r\geq l+k-1

对于任意数组 bb,Yunli 可以执行以下操作任意次数:

  • 选择一个索引 ii。设置 bi=xb_i=x,其中 xx 是她想要的任何整数(xx 不限于区间 [1,n][1,n])。

f(b)f(b) 表示为她需要执行的最小操作数,直到 bb 中存在长度至少为 kk 的连续子数组*^{\text{*}}

Yunli 收到一个大小为 nn 的数组 aa,并询问 qq 次。在每次查询中,你需要计算 j=l+k1rf([al,al+1,,aj])\sum_{j=l+k-1}^{r}f([a_l,a_{l+1},\ldots,a_j])

*^{\text{*}} 如果存在一个长度为 kk 的连续子数组,从索引 ii 开始(1ibk+11\leq i\leq |b|-k+1),那么对于所有 i<ji+k1i<j\leq i+k-1bj=bj1+1b_j=b_{j-1}+1

输入格式

第一行包含 tt1t1041\leq t\leq 10^4)——测试用例的数量。

每个测试用例的第一行包含三个整数 nnkkqq1kn21051\leq k\leq n\leq 2\cdot 10^5121051\leq 2 \cdot 10^ 5)——数组的长度、连续子数组的长度和查询次数。

下一行包含 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n1ain1\leq a_i\leq n)。

以下 qq 行包含两个整数 llrr1lrn1\leq l\leq r\leq nrl+k1r\geq l+k-1)——查询的边界。

保证所有测试用例中 nn 的总和不超过 21052\cdot 10^5,所有测试用例的 qq 总和不超过 21052\cdot 10^5

输出格式

对于每组测试数据上的每次查询,输出 j=l+k1rf([al,al+1,,aj])\sum_{j=l+k-1}^{r}f([a_l,a_{l+1},\ldots,a_j])

样例

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
6
5
2
2
5
2
3

样例说明

在第一组测试用例的第二次查询中,我们计算了以下函数值:

  • f([2,3,2,1,2])=3f([2,3,2,1,2])=3,因为 Yunli 可以设置 b3=4b_3=4b4=5b_4=5b5=6b_5=6,从而在 33 次操作中形成一个大小为 55 的连续子阵列。
  • f([2,3,2,1,2,3])=2f([2,3,2,1,2,3])=2,因为我们可以设置 b3=0b_3=0b2=1b_2=-1,在 22 次操作中中(从位置 22 开始)形成一个大小为55的连续子阵列。

这个查询的答案是 3+2=53+2=5

翻译 @Cure_Wing。

来源

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