#YHMB0035. [模板] 线段树1

[模板] 线段树1

P3372 【模板】线段树 1

题目描述

如题,已知一个数列 {ai}\{a_i\},你需要进行下面两种操作:

  1. 将某区间每一个数加上 kk
  2. 求出某区间每一个数的和。

输入格式

第一行包含两个整数 n,mn, m,分别表示该数列数字的个数和操作的总个数。

第二行包含 nn 个用空格分隔的整数 aia_i,其中第 ii 个数字表示数列第 ii 项的初始值。

接下来 mm 行每行包含 3344 个整数,表示一个操作,具体如下:

  1. 1 x y k:将区间 [x,y][x, y] 内每个数加上 kk
  2. 2 x y:输出区间 [x,y][x, y] 内每个数的和。

输出格式

输出包含若干行整数,即为所有操作 2 的结果。

输入输出样例 #1

输入 #1

5 5
1 5 4 2 3
2 2 4
1 2 3 2
2 3 4
1 1 5 1
2 1 4

输出 #1

11
8
20

说明/提示

对于 15%15\% 的数据:n8n \le 8m10m \le 10
对于 35%35\% 的数据:n103n \le {10}^3m104m \le {10}^4
对于 100%100\% 的数据:1n,m1051 \le n, m \le {10}^5ai,ka_i,k 为正数,且任意时刻数列的和不超过 2×10182\times 10^{18}

【样例解释】

操作次数 输入内容 操作类型 数列变化(操作后数列) 输出结果
0 - 初始状态 [1, 5, 4, 2, 3] -
1 2 2 4 求区间 [2, 4](数列第 2 - 4 项,对应值 5, 4, 2 )所有数的和 数列不变,仍为 [1, 5, 4, 2, 3] 和为 5 + 4 + 2 = 11
2 1 2 3 2 将区间 [2, 3](数列第 2 - 3 项,值 5, 4 )内所有数加 2 操作后数列为 [1, 7, 6, 2, 3] -
3 2 3 4 求区间 [3, 4](数列第 3 - 4 项,值 6, 2 )所有数的和 数列不变,为 [1, 7, 6, 2, 3] 和为 6 + 2 = 8
4 1 1 5 1 将区间 [1, 4](数列第 1 - 4 项,值 1, 7, 6, 2 )内所有数加 1 操作后数列为 [2, 8, 7, 3, 3](原表格此处数列第 5 项可能笔误,按逻辑应为 3 ,若按表格显示是 4 ,则以表格为准,操作后为 [2, 8, 7, 3, 4] -
5 2 1 4 求区间 [1, 4](数列第 1 - 4 项,值 2, 8, 7, 3 )所有数的和 数列不变,为 [2, 8, 7, 3, 4] 和为 2 + 8 + 7 + 3 = 20