数据结构-树状数组

数据结构-树状数组

树状数组是一种类似于前缀和的数据结构,但是前缀和的修改操作是 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;
}
相关推荐
元亓亓亓4 分钟前
LeetCode热题100--76. 最小覆盖子串--困难
算法·leetcode·职场和发展
CHANG_THE_WORLD8 分钟前
C++数组地址传递与数据影响:深入理解指针与内存
算法
json{shen:"jing"}8 分钟前
力扣-单词拆分
数据结构·算法
星火开发设计9 分钟前
序列式容器:deque 双端队列的适用场景
java·开发语言·jvm·c++·知识
aaa78716 分钟前
Codeforces Round 1080 (Div. 3) 题解
数据结构·算法
草履虫建模33 分钟前
Java 集合框架:接口体系、常用实现、底层结构与选型(含线程安全)
java·数据结构·windows·安全·决策树·kafka·哈希算法
LYS_061840 分钟前
c++学习(1)(编译过程)
c++·学习
特种加菲猫1 小时前
C++核心语法入门:从命名空间到nullptr的全面解析
开发语言·c++
浮生09191 小时前
DHUOJ 基础 85 86 87
数据结构·c++·算法
CHANG_THE_WORLD1 小时前
C++指针与引用:从语法到底层的全面剖析
java·数据结构·c++