树状数组 小鱼儿 2023-05-21 08:59 19阅读 0赞 ## 区间查询和单点修改 ## **单点修改** void update(int x,int v) { for(int i=x;i<=n;i+=lowbit(i)){ a[i]+=v; } } **区间查询** L~R的sum即 : getsum® - getsum(L-1); int getsum(int x) { int sum=0; for(int i=x;i>0;i-=lowbit(i)){ sum+=a[i]; } return sum; } **求lowbit** int lowbit(int x) { return x&(-x); } ## 区间修改和单点查询 ## (利用差分数组) 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数数加上 xx; 求出某一个数的值。 输入格式 第一行包含两个整数 NN、MM,分别表示该数列数字的个数和操作的总个数。 第二行包含 NN 个用空格分隔的整数,其中第 ii 个数字表示数列第 i i 项的初始值。 接下来 MM 行每行包含 22 或 44个整数,表示一个操作,具体如下: 操作 11: 格式:1 x y k 含义:将区间 \[x,y\]\[x,y\] 内每个数加上 kk; 操作 22: 格式:2 x 含义:输出第 xx 个数的值。 输出格式 输出包含若干行整数,即为所有操作 22 的结果。 输入输出样例 输入 \#1 复制 5 5 1 5 4 2 3 1 2 4 2 2 3 1 1 5 -1 1 3 5 7 2 4 输出 \#1 复制 6 10 #include<cstdio> #include<iostream> using namespace std; typedef long long ll; int n,m; ll a[500010]; ll b[500010]; int lowbit(int x) { return x&(-x); } void update(int x,int k) { for(int i=x;i<=n;i+=lowbit(i)) { b[i]+=k; } } ll getx(int x) { ll ans=0; for(int i=x;i>0;i-=lowbit(i)) { ans+=b[i]; } return a[x]+ans; } int main() { scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); } int x,y,k,t; while(m--) { scanf("%d",&t); if(t==1) { scanf("%d%d%d",&x,&y,&k); update(x,k);update(y+1,-k); } else { scanf("%d",&x); printf("%lld\n",getx(x)); } } return 0; }
相关 树状数组 详细介绍:[https://www.cnblogs.com/xenny/p/9739600.html][https_www.cnblogs.com_xenny_p_973960 我不是女神ヾ/ 2023年08月17日 16:26/ 0 赞/ 199 阅读
相关 树状数组 区间查询和单点修改 单点修改 void update(int x,int v) { for(int i=x;i<=n;i+=lowbit( 小鱼儿/ 2023年05月21日 08:59/ 0 赞/ 20 阅读
相关 树状数组 目录: 1. 概念 2. 应用 3. 充分性 4. 建立树状数组 5. 典题分析 一.概念 数组来模拟树形结构。那么、为什么不直接建树?没必要,因为树 秒速五厘米/ 2023年02月25日 11:29/ 0 赞/ 101 阅读
相关 树状数组 1、概述 树状数组(binary indexed tree),是一种设计新颖的数组结构,它能够高效地获取数组中连续n个数的和。概括说,树状数组通常用于解决以下问题:数组\{a 朱雀/ 2022年08月10日 10:53/ 0 赞/ 340 阅读
相关 树状数组 树状数组 树状数组:用线性数据结构的方法解决动态统计子树权和的问题。 类似于线段树,将区间分成小段,方便计算权和。 举个栗子,将a数组构造成树状数组c。 如果a 忘是亡心i/ 2022年07月26日 08:44/ 0 赞/ 325 阅读
相关 树状数组初探 前言 在前一篇文章:[线段树初探][Link 1] 中我们看了一下线段树的基本思想并且知道了线段树擅长于解决区间问题。其实对于某些区间问题,我们不仅可以用线段树解决,还可 古城微笑少年丶/ 2022年05月30日 03:22/ 0 赞/ 267 阅读
相关 树状数组 树状数组单点修改,单点查询 洛谷oj :[点我][Link 1] 模板: include<iostream> include<cstdio> 心已赠人/ 2022年05月16日 05:17/ 0 赞/ 385 阅读
相关 树状数组实现 树状数组能够完成如下操作: 给一个序列a0-an 计算前i项和 对某个值加x 时间o(logn) 注意:有人觉得前缀和就行了,但是你还要维护啊,改变某个值,一个一个改 叁歲伎倆/ 2022年05月12日 02:44/ 0 赞/ 258 阅读
相关 树状数组板子 树状数组 重点是在树状的数组 大家都知道二叉树吧 叶子结点代表A数组A\[1\]~A\[8\] ![786945-20161206222443741-120171603 r囧r小猫/ 2022年03月15日 15:22/ 0 赞/ 357 阅读
相关 树状数组模板 //树状数组 struct Bit { vector<int> a; int sz; void ini ゞ 浴缸里的玫瑰/ 2021年09月19日 05:46/ 0 赞/ 440 阅读
还没有评论,来说两句吧...