#P6442. 「JOI Open 2015」杀菌喷雾

「JOI Open 2015」杀菌喷雾

题目描述

译自 JOI Open 2015 T3 「殺菌スプレー / Sterilizing Spray

JOI 先生在 IOI 制药有限公司工作。在这家公司,研究人员忙于开发新的杀菌喷雾。

在这家公司,杀菌喷雾的强度定义如下:当我们对一个有 yy 个细菌的培养皿使用一次强度为 xx 的喷雾时,培养皿上的细菌数变为 yx\lfloor \frac{y}{x} \rfloor。现在,IOI 制药开发出了一种强度为 KK 的新喷雾。为了测试这种喷雾的性能,他们计划对它进行实验。他们使用编号为 11NNNN 个培养皿。在实验开始时,培养皿 ii 上有 CiC_{i} 个细菌。在实验中,他们按顺序执行 QQ 个操作。每个操作是以下之一:

  • 操作 1:选择一个培养皿 aa 和一个整数 bb,并将培养皿 aa 上的细菌数改为 bb
  • 操作 2:选择两个整数 l,r (1lrN)l, r\ (1 \leq l \leq r \leq N)。对培养皿 l,l+1,,r1,rl, l+1, \ldots, r-1, r 各喷一次杀菌喷雾。
  • 操作 3:选择两个整数 l,r (1lrN)l, r\ (1 \leq l \leq r \leq N)。计算培养皿 l,l+1,,r1,rl, l+1, \ldots, r-1, r 上的细菌数之和,并记录下来。

JOI 先生对喷雾如果按照预期发挥作用的结果很好奇。由于你是一名优秀的程序员,他请你预测实验的结果。

给定喷雾的强度和实验中的操作信息,写一个程序对于每个操作 3,求出它记录的数字。

输入格式

第一行包含三个用空格分隔的整数 N,Q,KN, Q, K,表示喷雾的强度是 KK,培养皿的数量是 NN,实验中的操作数量是 QQ

接下来的 NN 行中的第 i (1iN)i\ (1 \leq i \leq N) 行包含一个整数 CiC_{i},表示在实验开始时培养皿 ii 上有 CiC_{i} 个细菌。

接下来的 QQ 行中的第 i (1iQ)i\ (1 \leq i \leq Q) 行包含三个用空格分隔的整数 Si,Ti,UiS_{i}, T_{i}, U_{i},表示实验中第 ii 个操作的信息:

  • Si=1S_{i}=1 时,它们表示操作 1,其中 a=Ti,b=Uia=T_{i}, b=U_{i}
  • Si=2S_{i}=2 时,它们表示操作 2,其中 l=Ti,r=Uil=T_{i}, r=U_{i}
  • Si=3S_{i}=3 时,它们表示操作 3,其中 l=Ti,r=Uil=T_{i}, r=U_{i}

输出格式

对于每个操作 3,输出一行一个整数表示它记录的数字。

5 10 3
1
2
8
1
3
1 2 5
2 3 5
3 2 5
2 1 4
1 3 2
3 3 5
1 2 4
2 1 2
1 1 4
3 1 5
8
3
8
15 10 3
25
87
32
89
24
99
57
88
10
57
65
42
66
98
13
3 9 12
1 7 15
3 2 9
2 1 14
3 10 13
1 10 6
2 14 14
1 7 96
3 14 15
3 10 12
174
444
76
23
41

数据范围与提示

对于所有输入数据,满足:

  • 1N1051 \leq N \leq 10^5
  • 1Q1051 \leq Q \leq 10^5
  • 1K101 \leq K \leq 10
  • 0Ci109 (1iN)0 \leq C_{i} \leq 10^9\ (1 \leq i \leq N)
  • 1Si3 (1iQ)1 \leq S_{i} \leq 3\ (1 \leq i \leq Q)
  • Si=1S_{i}=1 时,有 1TiN1 \leq T_{i} \leq N0Ui109 (1iQ)0 \leq U_{i} \leq 10^9\ (1 \leq i \leq Q)
  • Si=2,3S_{i}=2,3 时,有 1TiUiN (1iQ)1 \leq T_{i} \leq U_{i} \leq N\ (1 \leq i \leq Q)

详细子任务附加限制及分值如下表所示。

子任务编号 附加限制 分值
11 1N,Q30001 \leq N,Q \leq 3000 55
22 Ci1C_{i} \leq 1;当 Si=1S_{i}=1 时,有 Ui1U_{i} \leq 1 1010
33 K=1K=1 1010
44 无附加限制 7575