当前位置: 首页 > news >正文

题解:洛谷 P3374 【模板】树状数组 1

【题目来源】

洛谷:P3374 【模板】树状数组 1 - 洛谷

【题目描述】

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

  • 将某一个数加上 x
  • 求出某区间每一个数的和

【输入】

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

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

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

  • 1 x k 含义:将第 x 个数加上 k
  • 2 x y 含义:输出区间 [x,y] 内每个数的和

【输出】

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

【输入样例】

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

【输出样例】

14
16

【算法标签】

《洛谷 P3374 树状数组1》 #树状数组#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 500005;  // 定义数组最大长度int n, m;      // n-数组长度,m-操作次数
int s[N];      // 树状数组// 计算x的最低有效位
int lowbit(int x)
{return x & -x;
}// 更新树状数组:在位置x增加k
void change(int x, int k)
{// 向上更新所有相关节点while (x <= n){s[x] += k;x += lowbit(x);}
}// 查询前缀和:计算前x个元素的和
int query(int x)
{int t = 0;// 向下累加所有相关节点while (x){t += s[x];x -= lowbit(x);}return t;
}int main()
{// 输入数组长度n和操作次数mcin >> n >> m;int op, x, y;  // op-操作类型,x和y-操作参数// 初始化树状数组for (int i = 1; i <= n; i++){cin >> y;change(i, y);  // 将初始值插入树状数组}// 处理每个操作for (int i = 1; i <= m; i++){cin >> op >> x >> y;// 操作1:单点修改if (op == 1){change(x, y);}// 操作2:区间查询else{// 输出区间[x,y]的和cout << query(y) - query(x - 1) << endl;}}return 0;
}
#include <bits/stdc++.h>
using namespace std;const int N = 500005;  // 定义数组最大长度int n, m;      // n-数组长度,m-操作次数
int tr[N];     // 树状数组(Binary Indexed Tree)// 计算x的最低有效位(用于树状数组索引计算)
int lowbit(int x)
{return x & -x;
}// 向树状数组添加值:在位置x增加c
void add(int x, int c)
{// 从x开始向上更新所有相关节点for (int i = x; i <= n; i += lowbit(i)){tr[i] += c;}
}// 查询前缀和:计算前x个元素的和
int query(int x)
{int res = 0;// 从x开始向下累加所有相关节点for (int i = x; i; i -= lowbit(i)){res += tr[i];}return res;
}int main()
{// 输入数组长度n和操作次数mcin >> n >> m;int op, x, y;  // op-操作类型,x和y-操作参数// 初始化树状数组for (int i = 1; i <= n; i++){cin >> y;add(i, y);  // 将初始值插入树状数组}// 处理每个操作for (int i = 1; i <= m; i++){cin >> op >> x >> y;// 操作1:单点修改,在位置x增加yif (op == 1){add(x, y);}// 操作2:区间查询,输出区间[x,y]的和else{// 利用前缀和计算区间和:sum[y] - sum[x-1]cout << query(y) - query(x - 1) << endl;}}return 0;
}

【运行结果】

5 5
1 5 4 2 3
1 1 3
2 2 5
14
1 3 -1
1 4 2
2 1 4
16
http://www.jsqmd.com/news/394579/

相关文章:

  • 题解:洛谷 P2085 最小函数值
  • 实用指南:FreeRTOS信号量
  • 看完就会:AI论文写作软件 千笔·专业学术智能体 VS 文途AI,MBA专属神器!
  • 日程邀请类钓鱼邮件攻击深度技术解读与防范
  • 宿主系统产品定义
  • 毕业论文神器 8个AI论文写作软件测评:本科生高效写作与格式规范全攻略
  • 省心了! 降AI率网站 千笔AI VS speedai,本科生专属降重神器!
  • 照着用就行:更贴合MBA需求的AI论文软件,千笔ai写作 VS 笔捷Ai
  • 题解:洛谷 P1801 黑匣子
  • YOLO26涨点改进| AAAI 2025 | 独家首发,细节涨点改进 | 引入SADecoder尺寸感知解码器模块,了解决解码器的尺度单一性问题,识别不同尺寸目标,适用于目标检测,图像分割,图像增强
  • 直接上结论:9个AI论文网站测评!MBA毕业论文写作必备工具推荐
  • 题解:AcWing 849 Dijkstra求最短路I
  • 动态窗口算法(DWA):让机器人在迷宫中优雅前行
  • 题解:洛谷 P3378 【模板】堆
  • 生产环境用Claude Code构建AI内容创作工作流:从灵感到发布的自动化实践最佳实践与性能优化
  • 揭秘2026年航空撤离舱实力厂家,助您明智选择,靠谱的撤离舱实力厂家推荐技术领航者深度解析 - 品牌推荐师
  • 2026汽车微动开关品牌优选榜单,这些品牌值得拥有,微动开关/鼠标微动开关/小型微动开关,汽车微动开关优质厂家口碑推荐 - 品牌推荐师
  • 了解2026欧曼增压器直销厂家口碑排行,选厂不迷茫,旁通阀压力表/潍柴p10H.5增压器,增压器组件推荐排行榜单 - 品牌推荐师
  • 2026年青少年心理辅导新观察:注重口碑与专业度的机构,叛逆期教育/问题青少年/青少年厌学,青少年心理辅导中心排行 - 品牌推荐师
  • 国版“OpenClaw” 网易有道 LobsterAI宣布开源:激活Agent创新生态
  • Log4j
  • 题解:AcWing 846 树的重心
  • 自感注册权:非存在论的存在之守护
  • 2026最新!AI论文写作软件 千笔 VS 灵感ai,研究生高效写作首选!
  • 2026年2月去油去屑洗发水,这几个牌子值得一试,去屑洗发水/止痒去屑洗发水/去油去屑洗发水,去油去屑洗发水产品口碑推荐 - 品牌推荐师
  • lazarus自定义mainmenu菜单栏
  • 一文讲透|10个AI论文网站测评:MBA毕业论文写作+开题报告必备工具推荐
  • 自感注册权:非存在论的存在之守护——AI元人文对存在论僭越与技术还原主义的临界批判
  • 题解:AcWing 517 信息传递
  • 题解:AcWing 1189 刻录光盘