#9878. 【模板】动态开点线段树

    ID: 9878 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>动态开点线段树懒标记区间修改区间查询区间和大值域模板

【模板】动态开点线段树

题目描述

如题,已知一个长度为 nn 的数列 {ai}\{a_i\}1in1 \le i \le n),初始时 ai=ia_i=i。你需要进行下面两种操作:

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

输入格式

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

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

  • 1 l r k:将区间 [l,r][l,r] 内每个数加上 kk
  • 2 l r:输出区间 [l,r][l,r] 内每个数的和。

输出格式

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

样例

5 5
2 2 4
1 2 3 2
2 3 4
1 1 5 1
2 1 4
9
9
18

数据范围与提示

  • 对于 30%30\% 的数据,n8n \le 8m10m \le 10
  • 对于 50%50\% 的数据,n105n \le 10^5
  • 对于 100%100\% 的数据,1m,k1051 \le m,k \le 10^51lrn1091 \le l \le r \le n \le 10^9