#P0765. 可以不用线段树吗

可以不用线段树吗

题目描述

你知道的,有些题目不用线段树其实写起来更快,如果你一定要用,那就用吧

小可拿到了一个长度为 nn 的数组 a1,a2,...,ana_{1},a_{2},...,a_{n},小达希望小可在 aa 上维护一些操作,具体地:

  • 操作一:给出下标 xx1xn1 \leq x \leq n),表示将第 xx 个前缀(即 a1,a2,...,axa_{1},a_{2},...,a_{x})全部变为它们的最小值,即:min(a1,a2,...,ax)\min(a_{1},a_{2},...,a_{x})

  • 操作二:给出下标 yy1yn1 \leq y \leq n),表示将第 yy 个后缀(即 ay,ay+1,...,ana_{y},a_{y+1},...,a_{n})全部变为它们的最小值,即:min(ay,ay+1,...,an)\min(a_{y},a_{y+1},...,a_{n})

  • 操作三:查询目前 aa 中所有元素的和。

你的任务就是帮小可维护这些操作,并回答所有的操作三。

输入格式

第一行两个以空格隔开的整数 nnqq ,表示数组的大小和操作次数。

第二行输入 n 个以空格隔开的整数,表示 aia_i

此后 qq 行,第 ii 行先输入一个整数 oio_{i}1oi31 \leq o_{i} \leq 3),表示第 ii 次操作的类型,编号同题干。随后在同一行:

  • oi=1o_{i} = 1,输入一个整数 xix_{i}1xin1 \leq x_{i} \leq n),表示操作的参数。
  • oi=2o_{i} = 2,输入一个整数 yiy_{i}1yin1 \leq y_{i} \leq n),表示操作的参数。

输出格式

对于每次操作类型二,输出一行一个整数表示答案。

样例

8 4
6 2 4 1 5 3 4 6
1 2
3
2 6
3
27
23

样例解释

在这个样例中:

  • 进行第一次操作后,a={2,2,4,1,5,3,4,6}a = \{ 2, 2, 4, 1, 5, 3, 4, 6 \},因此总和为:2727
  • 进行第二次操作后,a={2,2,4,1,5,3,3,3}a = \{ 2, 2, 4, 1, 5, 3, 3, 3 \},因此总和为:2323

数据范围

3030 分,保证 1n,q1031 \le n,q \le 10^3

100100 分,保证 $1 \le n,q \le 3*10^5 , 1 \le a_i \le 10^9 , 1 \le x_i,y_i \le n$,保证至少有一个操作类型 33