#P12080. [OOI 2025] Order Statistics

[OOI 2025] Order Statistics

背景

试题来源。

题目描述

给定一个由整数组成的数组 a1,a2,…,ana_1, a_2, \ldots, a_n,以及整数 kk 和 mm。 对该数组执行以下操作 mm 次:

  • 选出数组 aa 中 kk 个最大元素的位置 i1,i2,…,iki_1, i_2, \ldots, i_k。如果两个元素相等,则认为数组中较早出现的元素更大。
  • 将 ai1,ai2,…,aika_{i_1}, a_{i_2}, \ldots, a_{i_k} 的值各减 11。

对于从 11 到 nn 的 xx,令 Fm,k(x)F_{m,k}(x) 表示对数组 aa 应用 mm 次参数为 kk 的操作后得到的数组中第 xx 个顺序统计量的值。对于从 11 到 nn 的 xx,数组 a1,a2,…,ana_1, a_2, \ldots, a_n 的第 xx 个顺序统计量是指如果将数组 aa 按非递减顺序排序后,位于位置 xx 的元素。

对于所有满足 1≤l≤r≤n1 \le l \le r \le n 的 l,rl, r,令 Sm,k(l,r)S_{m,k}(l,r) 表示所有从 ll 到 rr 的整数 xx 的 Fm,k(x)F_{m,k}(x) 之和。 更正式地:

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

给定整数 m0m_0 和 k0k_0。 你必须计算所有从 11 到 nn 的 xx 的 Fm0,k0(x)F_{m_0,k_0}(x) 的值。

之后,你必须处理 qq 个查询。第 jj 个查询(1≤j≤q1 \le j \le q)可以是以下三种类型之一:

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

所有函数 FF 和 SS 的计算每次都是独立进行的,并且不会改变数组。第二种类型查询对数组的所有修改都会保留到后续查询中。

输入格式

第一行包含四个整数 nn、m0m_0、k0k_0 和 qq(1≤n≤200 0001 \le n \le 200\,000,0≤m0≤1090 \le m_0 \le 10^9,1≤k0≤n1 \le k_0 \le n,0≤q≤200 0000 \le q \le 200\,000)—— 分别表示数组 aa 的长度、操作次数、每次操作中减少的最大的元素数量以及查询的数量。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(−109≤ai≤109-10^9 \le a_i \le 10^9,1≤i≤n1 \le i \le n)—— 数组 aa 的元素。

接下来的 qq 行包含查询。在第 jj 个查询中,第一个数字是 tjt_j(1≤tj≤31 \le t_j \le 3)—— 第 jj 个查询的类型。

  • 如果 tj=1t_j=1,则下一行包含三个整数 mjm_j、kjk_j 和 xjx_j(0≤mj≤1090 \le m_j \le 10^9,1≤kj,xj≤n1 \le k_j, x_j \le n)—— 第一类查询的参数。
  • 如果 tj=2t_j=2,则下一行包含两个整数 pjp_j 和 vjv_j(1≤pj≤n1 \le p_j \le n,−109≤vj≤109-10^9 \le v_j \le 10^9)—— 第二类查询的参数。
  • 如果 tj=3t_j=3,则下一行包含四个整数 mjm_j、kjk_j、ljl_j 和 rjr_j(0≤mj≤1090 \le m_j \le 10^9,1≤kj,lj,rj≤n1 \le k_j, l_j, r_j \le n,lj≤rjl_j \le 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=8,m0=3m_0=3,k0=2k_0=2,q=16q=16。初始时,数组 aa 为 [3,1,2,−1,0,2,−1,4][3, 1, 2, -1, 0, 2, -1, 4]。 让我们看看如果用参数 k0k_0 对数组应用 m0m_0 次操作,数组会如何变化:

  • 数组为 [3,1,2,−1,0,2,−1,4][3,1,2,-1,0,2,-1,4]。两个最大的元素位于位置 11 和 88。将它们减 11 后,数组变为 [2,1,2,−1,0,2,−1,3][2,1,2,-1,0,2,-1,3]。
  • 数组为 [2,1,2,−1,0,2,−1,3][2,1,2,-1,0,2,-1,3]。两个最大的元素位于位置 11 和 88。将它们减 11 后,数组变为 [1,1,2,−1,0,2,−1,2][1,1,2,-1,0,2,-1,2]。
  • 数组为 [1,1,2,−1,0,2,−1,2][1,1,2,-1,0,2,-1,2]。两个最大的元素位于位置 33 和 66。将它们减 11 后,数组变为 [1,1,1,−1,0,1,−1,2][1,1,1,-1,0,1,-1,2]。

我们发现,对数组 aa 应用 33 次参数为 22 的操作后,它变成了 [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)=-1,F3,2(2)=−1F_{3,2}(2)=-1,F3,2(3)=0F_{3,2}(3)=0,F3,2(4)=1F_{3,2}(4)=1,F3,2(5)=1F_{3,2}(5)=1,F3,2(6)=1F_{3,2}(6)=1,F3,2(7)=1F_{3,2}(7)=1,F3,2(8)=2F_{3,2}(8)=2。

在样例中,我们需要处理 1616 个查询;让我们详细分析前 1010 个查询:

  • 第一个查询类型为 t1=3t_1=3,参数为 m1=3m_1=3,k1=2k_1=2,l1=2l_1=2,r1=6r_1=6,需要计算 S3,2(2,6)S_{3,2}(2,6) 的值。我们已经计算了从 11 到 88 的 xx 的 F3,2(x)F_{3,2}(x) 值,由此可以找到查询的答案:$$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$$
  • 第二个查询类型为 t2=1t_2=1,参数为 m2=3m_2=3,k2=2k_2=2,x2=4x_2=4,需要计算 F3,2(4)F_{3,2}(4) 的值。我们已经计算过,它等于 11。
  • 第三个查询类型为 t3=3t_3=3,参数为 m3=4m_3=4,k3=5k_3=5,l3=3l_3=3,r3=5r_3=5,需要计算 S4,5(3,5)S_{4,5}(3,5) 的值,即计算对数组 aa 应用 m3=4m_3=4 次参数为 k3=5k_3=5 的操作后得到的数组中,从第三个到第五个顺序统计量的和。在第三个查询时,数组 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$$
  • 第四个查询类型为 t4=1t_4=1,参数为 m4=4m_4=4,k4=5k_4=5,x4=6x_4=6。在应用 44 次参数为 55 的操作并对数组 aa 排序后,数组将变为 [−2,−2,−2,−1,−1,−1,−1,0][-2,-2,-2,-1,-1,-1,-1,0],所以第六个顺序统计量是 −1-1。
  • 第五个查询类型为 t5=2t_5=2,参数为 p5=5p_5=5 和 v5=−1v_5=-1。它将 a5a_5 的值修改为 −1-1,之后数组 aa 变为 [3,1,2,−1,−1,2,−1,4][3,1,2,-1,-1,2,-1,4]。
  • 第六个查询类型为 t6=2t_6=2,参数为 p6=6p_6=6 和 v6=3v_6=3。它将 a6a_6 的值修改为 33,之后数组 aa 变为 [3,1,2,−1,−1,3,−1,4][3,1,2,-1,-1,3,-1,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。
  • 第八、第九和第十个查询需要找到 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-1、11 和 22。

说明提示

本题的测试点包含十二个分组。每个分组的分数只有在该分组的所有测试点以及所有依赖分组的测试点都通过时才能获得。请注意,通过样例测试点对于某些分组不是必需的。Offline-evaluation 表示该分组的测试结果将在比赛结束后才可查看。

如果某个子任务对 mm 或 kk 有限制,那么这些限制同时适用于 m0m_0 和 k0k_0,以及所有第一类和第三类查询的参数。

Subtask 分数 限制条件:nn mm kk qq 依赖组别 说明
0 -- -- -- -- 样例测试点。
1 4 n≤1000n \le 1000 m≤1000m \le 1000 q=0q=0 --
2 5 -- -- k=1k=1
3 6 q≤100 000q \le 100\,000 2 所有查询中 tj=1t_j=1。
4 7 2, 3 所有查询中 tj≠3t_j \ne 3。
5 11 k=2k=2 q=0q=0 -- --
6 9 m≤106m \le 10^6 -- 1
7 10 n≤1000n \le 1000 --
8 7 -- 1, 2, 5 -- 7
9 11 q≤100 000q \le 100\,000 1 -- 3, 5 -- 8 所有查询中 tj=1t_j=1。
10 13 1 -- 3, 5 -- 9 所有查询中 tj≠2t_j\ne 2。
11 9 0 -- 10 --
12 8 -- 0 -- 11 Offline-evaluation.