数据结构-树状数组

数据结构-树状数组

树状数组是一种类似于前缀和的数据结构,但是前缀和的修改操作是 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;
}
相关推荐
FBI HackerHarry浩4 分钟前
AI大模型开发V2第四阶段线性回归
人工智能·算法·线性回归
Darkwanderor24 分钟前
Linux系统编程实战项目:模拟实现shell
linux·c++
himobrinehacken1 小时前
揭秘Windows程序启动的神秘之旅
c++·安全
Jerry1 小时前
LeetCode 108. 将有序数组转换为二叉搜索树
算法
库玛西1 小时前
C++ 运行时多态 :核心总结与原理图解
c语言·c++·笔记
蓝斯4972 小时前
Diff算法的简单介绍
算法
过期的秋刀鱼!2 小时前
L2正则化,防止过拟合-历史补充
算法·过拟合·l2正则化
Byron Loong2 小时前
【C++】重定向是什么
开发语言·c++
纳兰青华2 小时前
回文侦探:三种境界破解最长回文子串
java·算法·动态规划
hansang_IR3 小时前
【题解】LC:Z 算法(Z Algorithm)
c++·算法·字符串