数据结构-树状数组

数据结构-树状数组

树状数组是一种类似于前缀和的数据结构,但是前缀和的修改操作是 O(n)的,查询是 O(1) 的 。所以就有了树状数组这个数据结构,它的两种操作被中和了,都是 O(logn) 的。

C++ 复制代码
int nums[N];
//算出最后一位1的位置
int lowbit (int x) 
{    
    return x & -x;
}
//查询前缀和,时间复杂度O(logn)
int ask(int x)
{
    int res=0;
    for(;x;x-=lowbit(x)) res+=nums[x];
    return res;
}
//单点修改,时间复杂度O(logn)
int add(int x,int y)//nums[x]+y
{
    for(;x<=n;x+=lowbit(x)) nums[x]+=y;
}
相关推荐
麦兜和小可的舅舅14 分钟前
ClickHouse 列管理机制解析:从 COW、IColumn 到 CRTP
c++·clickhouse
北顾笙98017 分钟前
day38-数据结构力扣
数据结构·算法·leetcode
m0_6294947318 分钟前
LeetCode 热题 100-----14.合并区间
数据结构·算法·leetcode
xin_nai22 分钟前
LeetCode热题100(Java)(5)普通数组
算法·leetcode·职场和发展
旖-旎32 分钟前
深搜练习(组合)(5)
c++·算法·深度优先·力扣
vegetablesssss33 分钟前
vtk镜像图
c++·qt·vtk
@小码农1 小时前
2026年3月Scratch图形化编程等级考试一级真题试卷
开发语言·数据结构·c++·算法
【 】4231 小时前
C++&STL(Standard Template Library,标准模板库)
java·开发语言·c++
Wect2 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·算法·typescript
一只牛_0072 小时前
pthread亲和性继承的一个坑:main绑核让整个进程退化到单核
c++