[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」。
给定一个包含 n 个整数的数组 a1,a2,…,an,以及整数 k 和 m。对该数组执行 m 次以下操作:
- 选择 i1,i2,…,ik,即数组 a 中 k 个最大元素的编号。如果两个元素相等,则编号较小的元素视为较大。
- 将 ai1,ai2,…,aik 各减去 1。
对于 x 从 1 到 n,定义 Fm,k(x) 为从数组 a 经过 m 次参数为 k 的操作后得到的数组的第 x 个顺序统计量。对于 x 从 1 到 n,数组 a1,a2,…,an 的第 x 个顺序统计量是指将数组按非递减顺序排序后位于第 x 位的元素。
对于所有满足 1≤l≤r≤n 的 l 和 r,定义 Sm,k(l,r) 为 Fm,k(x) 从 x=l 到 x=r 的总和,即:
Sm,k(l,r)=x=l∑rFm,k(x)
给定整数 m0 和 k0。你需要计算对于所有 x 从 1 到 n 的 Fm0,k0(x) 值。
之后,你需要处理 q 个查询。第 j (1≤j≤q) 个查询可以是以下三种类型之一:
- 计算 Fmj,kj(xj) 的值。
- 将 apj 的值修改为 vj。
- 计算 Smj,kj(lj,rj) 的值。
所有 F 和 S 的计算都是独立的,不改变数组。所有第二类查询对数组的修改将保留到后续查询中。
输入格式
第一行包含四个整数 n,m0,k0,q $(1 \leq n \leq 200000, 0 \leq m_0 \leq 10^{9}, 1 \leq k_0 \leq n, 0 \leq q \leq 200000)$,分别表示数组 a 的长度、操作次数、每次操作减少的最大元素个数和查询数量。
第二行包含 n 个整数 a1,a2,…,an (−109≤ai≤109,1≤i≤n),表示数组 a 的元素。
接下来的 q 行描述查询。第 j 行开头是一个整数 tj (1≤tj≤3),表示第 j 个查询的类型。
- 如果 tj=1,则接下来有三个整数 mj,kj,xj (0≤mj≤109,1≤kj,xj≤n),表示第一类查询的参数。
- 如果 tj=2,则接下来有两个整数 pj 和 vj (1≤pj≤n,−109≤vj≤109),表示第二类查询的参数。
- 如果 tj=3,则接下来有四个整数 mj,kj,lj,rj $(0 \leq m_j \leq 10^{9}, 1 \leq k_j, l_j, r_j \leq n, l_j \leq r_j)$,表示第三类查询的参数。
输出格式
第一行输出 n 个整数 $F_{m_0,k_0}(1), F_{m_0,k_0}(2), \ldots, F_{m_0,k_0}(n)$。
接下来,对于每个第一类查询,在单独的一行中输出 Fmj,kj(xj) 的值;对于每个第三类查询,在单独的一行中输出 Smj,kj(lj,rj) 的值,作为对第 j 个查询的回答。
样例
输入
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=8,m0=3,k0=2,q=16。初始数组 a 为 [3,1,2,−1,0,2,−1,4]。我们来看看数组在执行 m0 次参数为 k0 的操作后的变化:
- 数组为 [3,1,2,−1,0,2,−1,4]。两个最大元素位于编号 1 和 8。将它们减去 1 后,数组变为 [2,1,2,−1,0,2,−1,3]。
- 数组为 [2,1,2,−1,0,2,−1,3]。两个最大元素位于编号 1 和 8。将它们减去 1 后,数组变为 [1,1,2,−1,0,2,−1,2]。
- 数组为 [1,1,2,−1,0,2,−1,2]。两个最大元素位于编号 3 和 6。将它们减去 1 后,数组变为 [1,1,1,−1,0,1,−1,2]。
因此,经过 3 次参数为 2 的操作后,数组 a 变为 [1,1,1,−1,0,1,−1,2]。如果对这个数组排序,得到 [−1,−1,0,1,1,1,1,2]。因此,顺序统计量为 F3,2(1)=−1,F3,2(2)=−1,F3,2(3)=0,F3,2(4)=1,F3,2(5)=1,F3,2(6)=1,F3,2(7)=1,F3,2(8)=2。
样例中需要处理 16 个查询,以下详细解析前 10 个查询:
- 第一个查询类型为 t1=3,参数为 m1=3,k1=2,l1=2,r1=6,要求计算 S3,2(2,6)。我们已经计算了 F3,2(x) 对于 x 从 1 到 8 的值,因此查询答案为:
$$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=1,参数为 m2=3,k2=2,x2=4,要求计算 F3,2(4)。我们已经计算过,其值为 1。
- 第三个查询类型为 t3=3,参数为 m3=4,k3=5,l3=3,r3=5,要求计算 S4,5(3,5),即在对数组 a 执行 m3=4 次参数为 k3=5 的操作后,得到的数组的第 3 到第 5 个顺序统计量之和。在第三个查询时,数组 a 为 [3,1,2,−1,0,2,−1,4]。五个最大元素位于编号 1,2,3,6,8。将它们减去 1 后,得到 [2,0,1,−1,0,1,−1,3]。再执行三次操作后,数组变为 [−1,−2,−2,−2,−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=1,参数为 m4=4,k4=5,x4=6。经过四次参数为 5 的操作并排序后,数组为 [−2,−2,−2,−1,−1,−1,−1,0],因此第六个顺序统计量为 −1。
- 第五个查询类型为 t5=2,参数为 p5=5 和 v5=−1。它将 a5 的值修改为 −1,之后数组 a 变为 [3,1,2,−1,−1,2,−1,4]。
- 第六个查询类型为 t6=2,参数为 p6=6 和 v6=3。它将 a6 的值修改为 3,之后数组 a 变为 [3,1,2,−1,−1,3,−1,4]。
- 第七个查询要求计算 F3,2(1) 的值。在第七个查询时,数组 a 为 [3,1,2,−1,−1,3,−1,4]。经过 3 次参数为 2 的操作后,数组变为 [1,1,1,−1,−1,2,−1,2]。第一个顺序统计量为 −1。
- 第八、九、十个查询要求计算 F3,2(3)、F3,2(4) 和 F3,2(8) 的值,即数组 [1,1,1,−1,−1,2,−1,2] 的第三、第四和第八个顺序统计量,分别为 −1、1 和 2。
数据范围与提示
详细子任务附加限制及分值如下表所示。其中子任务 0 是样例。
| 子任务 |
分值 |
附加限制 |
子任务依赖 |
备注 |
| 1 |
4 |
n≤1000,m≤1000 |
|
q=0 |
| 2 |
5 |
k=1 |
| 3 |
6 |
2 |
q≤100000,所有查询类型为 tj=1 |
| 4 |
7 |
2,3 |
q≤100000,所有查询类型不为 tj=3 |
| 5 |
11 |
k=2 |
|
q=0 |
| 6 |
9 |
m≤106 |
1 |
| 7 |
10 |
n≤1000 |
1 |
| 8 |
7 |
|
1,2,5∼7 |
| 9 |
11 |
1∼3,5∼8 |
q≤100000,所有查询类型为 tj=1 |
| 10 |
13 |
1∼3,5∼9 |
q≤100000,所有查询类型不为 tj=2 |
| 11 |
9 |
0∼10 |
q≤100000 |
| 12 |
8 |
0∼11 |
|