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

题解:洛谷 P3368 【模板】树状数组 2

【题目来源】

洛谷:P3368 【模板】树状数组 2 - 洛谷

【题目描述】

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

  1. 将某区间每一个数加上 \(x\)
  2. 求出某一个数的值。

【输入】

第一行包含两个整数 \(N\)\(M\),分别表示该数列数字的个数和操作的总个数。

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

接下来 \(M\) 行每行包含 \(2\)\(4\)个整数,表示一个操作,具体如下:

操作 \(1\)格式:1 x y k 含义:将区间 \([x,y]\) 内每个数加上 \(k\)

操作 \(2\)格式:2 x 含义:输出第 \(x\) 个数的值。

【输出】

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

【输入样例】

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

【输出样例】

6
10

【算法标签】

《洛谷 P3368 树状数组2》 #树状数组#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 500005;  // 定义数组最大长度int n, m;      // n-数组长度,m-操作次数
int a[N];      // 原始数组
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, k;  // op-操作类型,x/y/k-操作参数// 输入原始数组for (int i = 1; i <= n; i++){cin >> a[i];}// 处理每个操作for (int i = 1; i <= m; i++){cin >> op >> x;// 操作1:区间修改,对区间[x,y]每个元素增加kif (op == 1){cin >> y >> k;// 差分操作:在x处+k,在y+1处-kchange(x, k);change(y + 1, -k);}// 操作2:单点查询,输出a[x]加上差分数组的前缀和else{cout << a[x] + query(x) << endl;}}return 0;
}
// 使用acwing模板二刷
#include <bits/stdc++.h>
using namespace std;const int N = 500005;  // 定义数组最大长度int n, m;      // n-数组长度,m-操作次数
int a[N];      // 原始数组
int tr[N];     // 树状数组(用于维护差分数组)// 计算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, k;  // op-操作类型,x/y/k-操作参数// 输入原始数组for (int i = 1; i <= n; i++){cin >> a[i];}// 处理每个操作for (int i = 1; i <= m; i++){cin >> op >> x;// 操作1:区间修改,对区间[x,y]每个元素增加kif (op == 1){cin >> y >> k;// 差分操作:在x处+k,在y+1处-kadd(x, k);add(y + 1, -k);}// 操作2:单点查询,输出a[x]加上差分数组的前缀和else{cout << a[x] + query(x) << endl;}}return 0;
}

【运行结果】

5 5
1 5 4 2 3
1 2 4 2
2 3
6
1 1 5 -1
1 3 5 7 
2 4
10
http://www.jsqmd.com/news/394581/

相关文章:

  • 2026年安徽评价好的家教机构选哪家,大学生家教/小学家教/全托一对一/全托补习班/师范家教/家教,家教机构电话 - 品牌推荐师
  • 题解:洛谷 P3374 【模板】树状数组 1
  • 题解:洛谷 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元人文对存在论僭越与技术还原主义的临界批判