首页 > 其他分享 >线段树和树状数组

线段树和树状数组

时间:2022-11-26 00:34:23浏览次数:35  
标签:0110 0000 树状 二进制 线段 补码 数组

树状数组(弱智线段树)

树状数组中的下标不是正常的索引,而是与二进制相关

如图\(a2\)中存储着\(a1\)中的数据,\(a4\)中存储\(a3和a2\)的数据,依次类推\(a8\)存储\(a4,a6,a7\)的数据。

其中对应的二进制索引\(0001\rightarrow0010\rightarrow0100\)是把二进制中首位\(1\)左移一位也就是\(idx<<=1\)。

对于\(a3,a5,a6,a7\)来说\(0011\rightarrow0010\)就是如果有多个1,那么后面得1就左移一位。比如\(0101\)就是把第一位的\(1\)移动到第二位。\(0011\)就是把第一位的\(1\)移动到第二位相加得到\(0100\),对于\(0111\)来说也是一样的,移动最后一位,变成\(1000\)

怎么实现这个步骤呢?这里有个二进制算法(x & -x),比如\((0000 0110) & (1000 0110)\)其中二进制运算时使用的补码。正数的补码是其本身,负数是其反码+1。那么6的补码就是\(0000 0110\),而-6则是\(1111 1010\)。它俩进行与运算得到\(0000 0010\),然源索引值加上这个数就得到了。\(6+2=8\)

线段树

标签:0110,0000,树状,二进制,线段,补码,数组
From: https://www.cnblogs.com/GuanStudy/p/16926753.html

相关文章

  • ctfshow菜狗杯-无一幸免_FIXED(数组整型溢出绕过赋值式“永真”判断)
    if(isset($_GET['0'])){$arr[$_GET['0']]=1;if($arr[]=1){die("nonono!");}else{die($flag);}}重点在$arr[]=1意思是在数......
  • Js AES 中key与字节数组的使用
    CryptoJS库使用GitHub地址:https://github.com/brix/crypto-jsnpm下载:npminstallcrypto-js//字符串转字节数组varwordArray=CryptoJS.enc.Utf8.parse("3de416......
  • Java 数组拷贝的几种方式
    目前在Java中数据拷贝提供了如下方式:1、clone2、System.arraycopy3、Arrays.copyOf4、Arrays.copyOfRange。一、clone方法clone方法是从Object类继承过来的,基本数据......
  • NEFU锐格作业一[数组-字符串]
    ​​推荐:NEFU大一下C语言锐格实验与作业参考程序目录​​文章目录​​NEFU锐格作业一[数组-字符串]​​​​知识点​​​​题目​​​​7132​​​​7124​​​​7150​​​......
  • js 字节数组模拟 agv auo
    res=JSON.stringify({x:10.0,y:3.0,angle:0});console.log(res);byteArr=[]for(letcofres){byteArr.push(c.charCodeAt().toString(16))}console......
  • [拆位线段树]RMQ
    [拆位线段树]RMQ题目​​https://ac.nowcoder.com/acm/problem/21414​​思路区间或,区间求和对于区间或,异或这种位运算,没法之间打懒标记。但是如果我们按位拆分,可以发现对......
  • [线段树 多tag]D-数据结构
    [线段树多tag]D-数据结构题目思路多tag的线段树有时序性问题,因此不能直接把标记累计。例如:对于同样两个标记+和*,ax+b和(x+b)*a是不一样的,因此我们需要设计tag合并的规则......
  • js中对数字数组排序
    js中对数组数字排序(3条消息)js实现数字排序方法_soupJian前端养成记的博客-CSDN博客_js数字排序<scripttype="text/javascript">functionweek(){va......
  • Python Numpy 数组的基本操作
    Numpy是一个通用的数组处理包。它提供了一个高性能的多维数组对象,以及处理这些数组的工具。它是Python科学计算的基本包。Numpy除了具有科学用途外,还可以作为通用数据的高效......
  • LeetCode 912.排序数组
    题目描述:给你一个整数数组 nums,请你将该数组升序排列。示例1:输入:nums= [5,2,3,1]输出:[1,2,3,5]示例2:输入:nums= [5,1,1,2,0,0]输出:[0,0,1,1,2,5]提示:1. 1 <= nums......