P3374 【模板】树状数组 1(单点修改,区间查询)
P3374 【模板】树状数组 1(单点修改,区间查询)
原创 于 2023-11-29 15:20:28 发布 · 粉丝可见 · 481 阅读 · 8 · 8 · 本内容遵循CC 4.0 BY-SA版权协议 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 GEO检测 · 编辑
文章链接:https://blog.csdn.net/hacker_51/article/details/134690364
本题链接: 【模板】树状数组 1 - 洛谷
题目:

cobol<br/>5 5<br/>1 5 4 2 3<br/>1 2 4 2<br/>2 3<br/>1 1 5 -1<br/>1 3 5 7<br/>2 4<br/> |
|---|
<br/>14<br/>16<br/> |
|---|

思路:
由题意,树状数组的思想含义就是巧妙的利用二进制原理,对添加的数值的预处理,预处理过后,巧妙的利用二进制的反推。
下面给出对应的函数操作:
cpp<br/>// 树状数组的单点添加<br/>inline void Add_pos(int pos,int x)<br/>{<br/> for(int i = pos;i <= n + 1;i+=lowbit(i)) arr[i] += x;<br/>}<br/> |
|---|
cpp<br/> <br/>// 树状数组的区间查询<br/>// 原理:利用前缀和的性质,结合树状数组二进制巧妙的存储方式<br/>// 树状数组求和R,即得到下标 1 ~ R 的区间和<br/>// 再减去 1 ~ L - 1 的区间和,即可获得答案 L ~ R 的区间和 <br/>inline int ask(int L,int R)<br/>{<br/> int ans = 0;<br/> for(int i = L-1;i;i-=lowbit(i)) ans -= arr[i];<br/> for(int i = R;i;i-=lowbit(i)) ans += arr[i];<br/> return ans;<br/>}<br/> |
|---|
代码详解如下:
1 | |
最后提交:

觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭
wechat pay
ali pay
P3374 【模板】树状数组 1(单点修改,区间查询)
http://blog.angindem.cn/2023/11/29/Angindem-CSDN博客/110_110/