#P13825. 【模板】线段树 1.5(Dynamic Segment Tree)

0

【模板】线段树 1.5(Dynamic Segment Tree)

【模板】线段树 1.5(Dynamic Segment Tree)

题目描述

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

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

输入格式

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

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

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

输出格式

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

样例输入 #1

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

样例输出 #1

9
9
18

数据范围

对于 30%30\% 的数据,n≤8n \le 8,m≤10m \le 10。
对于 50%50\% 的数据,n≤105n \le {10}^5。
对于 100%100\% 的数据,1≤m,k≤1051 \le m,k \le {10}^5,1≤l≤r≤n≤1091 \leq l \leq r \leq n\leq 10^9。

知识点与难度

本题涉及的知识点从属于 CSP-S,难度(CF Rating):1600。


测试点分布

Subtask 分值 测试点编号 说明
0 10 1 样例
1 25 2~8 小规模与边界测试数据
2 30 9~16 中等规模测试数据
3 35 17~25 满规模极限测试数据

出处:原题链接