首页 > 其他分享 >树状数组

树状数组

时间:2023-05-01 11:33:43浏览次数:34  
标签:树状 复杂度 数组 操作 op 列题

树状数组学习笔记

第 $ 1 $ 章:树状数组

什么是树状数组

树状数组可以理解为一个简易的线段树

列题一

给定 \(a\) 个数,执行 \(q\) 次操作:

\(op=1\) 时:将 \(a_x\) 改成 \(y\)

\(op=2\) 时:询问 \(a_x\) 到 \(a_y\) 的和

这题显然可以用暴力做,用数组储存,操作 \(1\) 复杂度是 \(O(1)\) ,但操作 \(2\) 的复杂度是 \(O(n)\) 。绝对超时

考虑使用树状数组

我们定义一个数组 \(b\) :

\(b_1=a_1\)

\(b_2=a_1+a_2\)

\(b_3=a_3\)

\(b_4=a_1+a_2+a_3+a_4\)

\(…\)

标签:树状,复杂度,数组,操作,op,列题
From: https://www.cnblogs.com/lc0802/p/17366285.html

相关文章

  • c#-随机数组
    publicstaticint[]GenerateRandowArray(intmaxSize,intmaxValue){Randomrd=newRandom();int[]arr=newint[(int)((maxSize+1)*rd.NextDouble())];for(inti=0;i<arr.Length;i++){arr[i]=(in......
  • 树状数组
    树状数组,可以高效地计算数列前缀和,它的查询(求前缀和)和更新(修改)操作都可以在O(logn)的时间完成tr[i]存储以i为终点,长度为lowbit(i)的区间修改:for(inti=x;i<=n;i+=lowbit(i))tr[i]+=c查询:for(inti=x;i;i-=lowbit(i))sum......
  • NOI / 1.8编程基础之多维数组
    11:图像旋转1.描述输入一个n行m列的黑白图像,将它顺时针旋转90度后输出。2.输入第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1<=n<=100,1<=m<=100。接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间3.......
  • 将数组清空
    给你一个包含若干互不相同整数的数组nums,你需要执行以下操作直到数组为空:如果数组中第一个元素是当前数组中的最小值则删除它否则,将第一个元素移动到数组的末尾请你返回需要多少个操作使nums为空1.逆向思维classSolution{public:longlongcountOperationsToEmpt......
  • 【剑指 Offer】 51. 数组中的逆序对
    【题目】在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例1:输入:[7,5,6,4]输出:5 限制:0<=数组长度<=50000来源:力扣(LeetCode)链接:https://leetcode.cn/problems/shu-zu-zhong-de-ni-xu-du......
  • Java根据Integer数组(有null值)递归构造二叉树
    二叉树:publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.val=val;this.l......
  • Java二维数组
    二维数组二维数组的应用场景:但我们需要把数据分组管理的时候,就需要用到二维数组二维数组初始化:1、静态初始化:格式:数据类型[][]数组名=new数据类型[][]{{元素1,元素2},{元素1,元素2}};eg:int[][]arr=newint[][]{{11,22},{33,44}}简化格式:数据类型[][]数组名={{元素1......
  • HashMap的数组长度为何必须是2的n次方
    扩容方便,数字位移计算方便效率高;计算元素下标使用的方式是key的hash&(数组length-1),由于length是2^n,转换成二进制后2^-1最低位就全部都是1,比如111,就相当于是数组长度的掩码,那么hash&111就可以将数组的每一位都覆盖,加入数组长度不是2^n,那么length-1低位不全是1,比如101,那么h......
  • 2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数
    2023-04-29:一个序列的宽度定义为该序列中最大元素和最小元素的差值。给你一个整数数组nums,返回nums的所有非空子序列的宽度之和由于答案可能非常大,请返回对109+7取余后的结果。子序列定义为从一个数组里删除一些(或者不删除)元素,但不改变剩下元素的顺序得到的数组......
  • 2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数
    2023-04-29:一个序列的宽度定义为该序列中最大元素和最小元素的差值。给你一个整数数组nums,返回nums的所有非空子序列的宽度之和由于答案可能非常大,请返回对109+7取余后的结果。子序列定义为从一个数组里删除一些(或者不删除)元素,但不改变剩下元素的顺序得到的数......