首页 > 其他分享 >数据结构:树状数组

数据结构:树状数组

时间:2023-02-26 11:12:11浏览次数:35  
标签:return 树状 int lowbit sum 数组 数据结构

声明:全部代码未经编译,不保证正确性,仅限逻辑学习,请勿直接抄袭

什么是树状数组

树状数组,本质是运用二进制运算规则维护区间。它的效率高于线段树,空间也少于线段树。但是所能维护的数据操作比较单一。

lowbit函数

lowbit(x),作用是得到 \(x\) 的二进制最低位1表示的十进制数。
写法如下:

int lowbit(int x){
    return x-(x&(x-1));
}

int lowbit(int x){
    return x&-x;
}

为何如此,自己推一下就行了。

树状数组构建

严格来说树状数组不需提前构建,它只有一个add(x,k)函数,用于在数组x位置加上或更改为k。
设原数组a[n],树状数组tree[n],则tree[i]代表在原数组位置 \(i\) 开始,向前数lowbit(i)个数(包括第 \(i\) 个数)的和。
单点修改代码:

void add(int x,int k){
    while(x<=n){
        tree[x]+=k;
        x+=lowbit(x);      
    }
}

树状数组区间求和

由于树状数组维护的是部分前缀和,所以很简单。
代码:

int sum(int x){
    int ans=0;
    while(x>=1){
        ans+=tree[x];
        x-=lowbit(x);
    }
    return ans;
}

//区间[l,r]的和就是sum(r)-sum(l-1);

树状数组区间修改

这里用到了差分的思想。
原数列:0 0 0 0 0
我们要给2-4那一段加上x,可以这样操作:
0 x 0 0 -x
然后进行单点查询时加上原数组中的数就行了。

标签:return,树状,int,lowbit,sum,数组,数据结构
From: https://www.cnblogs.com/mornhus-xsylf-123/p/17156304.html

相关文章

  • 2022-2023-2 20221320 数据结构第一周学习总结
    一、教材学习内容总结:1.周一的课上复习了冯·诺依曼模型:输入设备,输出设备(IO设备),存储器,运算器,控制器(CPU)。计算机由硬件(裸机)和软件(系统软件与应用软件)组成(软件是程序、数......
  • 动态数组代码实现
    一、动态数组一般在静态数组定义后,系统就会为其分配对应长度的连续的专有内存空间,可是,我们都知道,不同的运行样例,所需要的数组长度是不一样的,为了所有样例都可以执行,一般......
  • 数据结构进阶
    并查集并查集,是一种树形数据结构,用于维护不相交的集合。基本原理每个集合用一棵树来表示,树根的编号就是整个集合的编号。每个节点存储了它的父节点。模板题(AcWing.836......
  • 数据结构、算法基本概念
    一、数据数据(Data)是信息的载体,它能够被计算机识别、存储和加工处理。它是计算机程序加工的原料,应用程序处理各种各样的数据。计算机科学中,所谓数据就是计算机加工处理的......
  • 二维数组的声明及其作为函数参数的方式
    ◆概要本文以3行2列的二维数组为例,介绍了如何声明自动存储、静态存储和动态存储的二维数组,及其如何将它们作为函数参数进行传递的方式。◆实现处理自动存储或静态......
  • 精华推荐 |【算法数据结构专题】「延时队列算法」史上非常详细分析和介绍如何通过时间
    时间轮的介绍时间轮(TimeWheel)是一种实现延迟功能(定时器)的精妙的高级算法,其算法应用范围非常广泛,在Java开发过程中常用的Dubbo、Netty、Akka、Quartz、ZooKeeper、Kafka等各......
  • 数组和指针
    一维数组和指针先回忆一下,数组是由一系列类型相同的元素组成。如:charch[4];/*4个字符的数组*/intin[4];/*4个整数的数组*/floatfl[4];/*4个浮点数的数......
  • 精华推荐 |【算法数据结构专题】「延时队列算法」史上非常详细分析和介绍如何通过时间
    时间轮的介绍时间轮(TimeWheel)是一种实现延迟功能(定时器)的精妙的高级算法,其算法应用范围非常广泛,在Java开发过程中常用的Dubbo、Netty、Akka、Quartz、ZooKeeper、Kafka......
  • 数据结构(借鉴408)-图
    数据结构图及其应用存储及基本操作邻接矩阵法邻接表法遍历深度优先搜索(DFS)遍历广度优先搜索(BFS)遍历最小生成树边稠密:普里姆(Prim)算法边稀疏:克鲁斯卡尔(......
  • 后缀数组做题笔记
    后缀数组笔记这里挂一个学弟学习笔记的链接:Link,大部分内容都学习自这里。按道理这篇文章会持续更新1.Preface​ 首先有几个概念需要明确。本文中所有字符串下标从\(1......