线段树
线段树可以用于解决区间问题
P3372 【模板】线段树 1
题目描述
如题,已知一个数列,你需要进行下面两种操作:
- 将某区间每一个数加上 kk。
- 求出某区间每一个数的和。
输入格式
第一行包含两个整数 n, mn,m,分别表示该数列数字的个数和操作的总个数。
第二行包含 nn 个用空格分隔的整数,其中第 ii 个数字表示数列第 ii 项的初始值。
接下来 mm 行每行包含 33 或 44 个整数,表示一个操作,具体如下:
1 x y k
:将区间 [x, y][x,y] 内每个数加上 kk。2 x y
:输出区间 [x, y][x,y] 内每个数的和。
输出格式
输出包含若干行整数,即为所有操作 2 的结果。
输入输出样例
输入 #1
10 3 0 2 6 1 1 8 0 5 7
输出 #1
11
8
20
【思路】
本题让我们做到区间查询以及区间求和
1.建造树

建树的过程类似于二分
在建树以及后面的过程中一定要注意(x<<1)和(x<<1|1), ','的优先级大于‘<<’,所以在写代码时一定不能忘了加括号
2.区间求和
add是懒人标记,可以生动形象的理解为:在过年的时候,作为孩子的你收到了长辈们的压岁钱,但是,通常压岁钱不会在自己手里,而是会在爸妈手里(父节点),会等到一定时候在全部给你(子节点)。
标**的两行可以通过画图理解

3.区间查询
注意数据大小
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】