#loj5360. 「OOI 2025 Day 2」顺序统计量

「OOI 2025 Day 2」顺序统计量

[AdditionalFile5360.zip](file://AdditionalFile5360.zip?type=additional_file)

#5360. 「OOI 2025 Day 2」顺序统计量

标签: 传统 | 时间限制: 4000 ms | 内存限制: 1024 MiB |

题目描述

题目译自 Open Olympiad in Informatics 2025 Day2 T4 「Порядковая статистика / Order Statistics

给定一个包含 nn 个整数的数组 a1,a2,,ana_1, a_2, \ldots, a_n,以及整数 kkmm。对该数组执行 mm 次以下操作:

  • 选择 i1,i2,,iki_1, i_2, \ldots, i_k,即数组 aakk 个最大元素的编号。如果两个元素相等,则编号较小的元素视为较大。
  • ai1,ai2,,aika_{i_1}, a_{i_2}, \ldots, a_{i_k} 各减去 11

对于 xx11nn,定义 Fm,k(x)F_{m,k}(x) 为从数组 aa 经过 mm 次参数为 kk 的操作后得到的数组的第 xx 个顺序统计量。对于 xx11nn,数组 a1,a2,,ana_1, a_2, \ldots, a_n 的第 xx 个顺序统计量是指将数组按非递减顺序排序后位于第 xx 位的元素。

对于所有满足 1lrn1 \leq l \leq r \leq nllrr,定义 Sm,k(l,r)S_{m,k}(l,r)Fm,k(x)F_{m,k}(x)x=lx = lx=rx = r 的总和,即:

Sm,k(l,r)=x=lrFm,k(x)S_{m,k}(l,r) = \sum_{x=l}^{r} F_{m,k}(x)

给定整数 m0m_0k0k_0。你需要计算对于所有 xx11nnFm0,k0(x)F_{m_0,k_0}(x) 值。

之后,你需要处理 qq 个查询。第 jj (1jq)(1 \leq j \leq q) 个查询可以是以下三种类型之一:

  1. 计算 Fmj,kj(xj)F_{m_j,k_j}(x_j) 的值。
  2. apja_{p_j} 的值修改为 vjv_j
  3. 计算 Smj,kj(lj,rj)S_{m_j,k_j}(l_j,r_j) 的值。

所有 FFSS 的计算都是独立的,不改变数组。所有第二类查询对数组的修改将保留到后续查询中。

输入格式

第一行包含四个整数 n,m0,k0,qn, m_0, k_0, q $(1 \leq n \leq 200000, 0 \leq m_0 \leq 10^{9}, 1 \leq k_0 \leq n, 0 \leq q \leq 200000)$,分别表示数组 aa 的长度、操作次数、每次操作减少的最大元素个数和查询数量。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n (109ai109,1in)(-10^{9} \leq a_i \leq 10^{9}, 1 \leq i \leq n),表示数组 aa 的元素。

接下来的 qq 行描述查询。第 jj 行开头是一个整数 tjt_j (1tj3)(1 \leq t_j \leq 3),表示第 jj 个查询的类型。

  • 如果 tj=1t_j=1,则接下来有三个整数 mj,kj,xjm_j, k_j, x_j (0mj109,1kj,xjn)(0 \leq m_j \leq 10^{9}, 1 \leq k_j, x_j \leq n),表示第一类查询的参数。
  • 如果 tj=2t_j=2,则接下来有两个整数 pjp_jvjv_j (1pjn,109vj109)(1 \leq p_j \leq n, -10^{9} \leq v_j \leq 10^{9}),表示第二类查询的参数。
  • 如果 tj=3t_j=3,则接下来有四个整数 mj,kj,lj,rjm_j, k_j, l_j, r_j $(0 \leq m_j \leq 10^{9}, 1 \leq k_j, l_j, r_j \leq n, l_j \leq r_j)$,表示第三类查询的参数。

输出格式

第一行输出 nn 个整数 $F_{m_0,k_0}(1), F_{m_0,k_0}(2), \ldots, F_{m_0,k_0}(n)$。

接下来,对于每个第一类查询,在单独的一行中输出 Fmj,kj(xj)F_{m_j, k_j}(x_j) 的值;对于每个第三类查询,在单独的一行中输出 Smj,kj(lj,rj)S_{m_j, k_j}(l_j, r_j) 的值,作为对第 jj 个查询的回答。

样例

输入

8 3 2 16
3 1 2 -1 0 2 -1 4
3 3 2 2 6
1 3 2 4
3 4 5 3 5
1 4 5 6
2 5 -1
2 6 3
1 3 2 1
1 3 2 3
1 3 2 4
1 3 2 8
1 0 5 6
2 1 5
3 1 3 7 8
3 2 3 5 8
3 3 3 4 7
3 4 3 4 7

输出

-1 -1 0 1 1 1 1 2
2
1
-4
-1
-1
-1
1
2
3
7
8
4
2

在样例中,n=8n=8m0=3m_0=3k0=2k_0=2q=16q=16。初始数组 aa[3,1,2,1,0,2,1,4][3, 1, 2, -1, 0, 2, -1, 4]。我们来看看数组在执行 m0m_0 次参数为 k0k_0 的操作后的变化:

  1. 数组为 [3,1,2,1,0,2,1,4][3,1,2,-1,0,2,-1,4]。两个最大元素位于编号 1188。将它们减去 11 后,数组变为 [2,1,2,1,0,2,1,3][2,1,2,-1,0,2,-1,3]
  2. 数组为 [2,1,2,1,0,2,1,3][2,1,2,-1,0,2,-1,3]。两个最大元素位于编号 1188。将它们减去 11 后,数组变为 [1,1,2,1,0,2,1,2][1,1,2,-1,0,2,-1,2]
  3. 数组为 [1,1,2,1,0,2,1,2][1,1,2,-1,0,2,-1,2]。两个最大元素位于编号 3366。将它们减去 11 后,数组变为 [1,1,1,1,0,1,1,2][1,1,1,-1,0,1,-1,2]

因此,经过 33 次参数为 22 的操作后,数组 aa 变为 [1,1,1,1,0,1,1,2][1,1,1,-1,0,1,-1,2]。如果对这个数组排序,得到 [1,1,0,1,1,1,1,2][-1,-1,0,1,1,1,1,2]。因此,顺序统计量为 F3,2(1)=1F_{3,2}(1)=-1F3,2(2)=1F_{3,2}(2)=-1F3,2(3)=0F_{3,2}(3)=0F3,2(4)=1F_{3,2}(4)=1F3,2(5)=1F_{3,2}(5)=1F3,2(6)=1F_{3,2}(6)=1F3,2(7)=1F_{3,2}(7)=1F3,2(8)=2F_{3,2}(8)=2

样例中需要处理 1616 个查询,以下详细解析前 1010 个查询:

  1. 第一个查询类型为 t1=3t_1=3,参数为 m1=3m_1=3k1=2k_1=2l1=2l_1=2r1=6r_1=6,要求计算 S3,2(2,6)S_{3,2}(2,6)。我们已经计算了 F3,2(x)F_{3,2}(x) 对于 xx1188 的值,因此查询答案为:
$$S_{3,2}(2,6)=F_{3,2}(2)+F_{3,2}(3)+F_{3,2}(4)+F_{3,2}(5)+F_{3,2}(6)=(-1)+0+1+1+1=2$$
  1. 第二个查询类型为 t2=1t_2=1,参数为 m2=3m_2=3k2=2k_2=2x2=4x_2=4,要求计算 F3,2(4)F_{3,2}(4)。我们已经计算过,其值为 11
  2. 第三个查询类型为 t3=3t_3=3,参数为 m3=4m_3=4k3=5k_3=5l3=3l_3=3r3=5r_3=5,要求计算 S4,5(3,5)S_{4,5}(3,5),即在对数组 aa 执行 m3=4m_3=4 次参数为 k3=5k_3=5 的操作后,得到的数组的第 33 到第 55 个顺序统计量之和。在第三个查询时,数组 aa[3,1,2,1,0,2,1,4][3, 1, 2, -1, 0, 2, -1, 4]。五个最大元素位于编号 1,2,3,6,81,2,3,6,8。将它们减去 11 后,得到 [2,0,1,1,0,1,1,3][2,0,1,-1,0,1,-1,3]。再执行三次操作后,数组变为 [1,2,2,2,1,1,1,0][-1,-2,-2,-2,-1,-1,-1,0]。排序后为 [2,2,2,1,1,1,1,0][-2,-2,-2,-1,-1,-1,-1,0]。因此,查询答案为:
$$S_{4,5}(3,5)=F_{4,5}(3)+F_{4,5}(4)+F_{4,5}(5)=(-2)+(-1)+(-1)=-4$$
  1. 第四个查询类型为 t4=1t_4=1,参数为 m4=4m_4=4k4=5k_4=5x4=6x_4=6。经过四次参数为 55 的操作并排序后,数组为 [2,2,2,1,1,1,1,0][-2,-2,-2,-1,-1,-1,-1,0],因此第六个顺序统计量为 1-1
  2. 第五个查询类型为 t5=2t_5=2,参数为 p5=5p_5=5v5=1v_5=-1。它将 a5a_5 的值修改为 1-1,之后数组 aa 变为 [3,1,2,1,1,2,1,4][3,1,2,-1,-1,2,-1,4]
  3. 第六个查询类型为 t6=2t_6=2,参数为 p6=6p_6=6v6=3v_6=3。它将 a6a_6 的值修改为 33,之后数组 aa 变为 [3,1,2,1,1,3,1,4][3,1,2,-1,-1,3,-1,4]
  4. 第七个查询要求计算 F3,2(1)F_{3,2}(1) 的值。在第七个查询时,数组 aa[3,1,2,1,1,3,1,4][3,1,2,-1,-1,3,-1,4]。经过 33 次参数为 22 的操作后,数组变为 [1,1,1,1,1,2,1,2][1,1,1,-1,-1,2,-1,2]。第一个顺序统计量为 1-1
  5. 第八、九、十个查询要求计算 F3,2(3)F_{3,2}(3)F3,2(4)F_{3,2}(4)F3,2(8)F_{3,2}(8) 的值,即数组 [1,1,1,1,1,2,1,2][1,1,1,-1,-1,2,-1,2] 的第三、第四和第八个顺序统计量,分别为 1-11122

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖 备注
11 44 n1000n \leq 1000m1000m \leq 1000 q=0q=0
22 55 k=1k=1
33 66 22 q100000q \leq 100000,所有查询类型为 tj=1t_j=1
44 77 2,32, 3 q100000q \leq 100000,所有查询类型不为 tj=3t_j=3
55 1111 k=2k=2 q=0q=0
66 99 m106m \leq 10^{6} 11
77 1010 n1000n \leq 1000 11
88 77 1,2,571, 2, 5 \sim 7
99 1111 13,581 \sim 3, 5 \sim 8 q100000q \leq 100000,所有查询类型为 tj=1t_j=1
1010 1313 13,591 \sim 3, 5 \sim 9 q100000q \leq 100000,所有查询类型不为 tj=2t_j=2
1111 99 0100 \sim 10 q100000q \leq 100000
1212 88 0110 \sim 11