博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树状数组简述
阅读量:7261 次
发布时间:2019-06-29

本文共 571 字,大约阅读时间需要 1 分钟。

树状数组是一种单点修改并查询前缀和的数据结构

查询和修改时间复杂度都是log(n)

对于树状数组我们首先需要知道lowbit的概念

lowbit即是x & -x

通俗点是一个数二进制下的从后往前数第一个1所对应的值

 

具体算法的话就是两个

一个是修改函数如下

 

1 void add(int pos, int w) 2  3 { 4  5     while(pos <= n) 6  7     { 8  9         c[pos]+=w;10 11         pos+=lowbit(pos);12 13     }14 15 }

 

一个是查询如下

1 int sum(int pos) 2  3 { 4  5     int ret = 0; 6  7     while (pos > 0) 8  9     {10 11         ret+=c[pos];12 13         pos-=lowbit(pos);14 15     }16 17     return ret;18 19 }

 

 

 

 

 

 

很好写也易于理解

我第一次自己写的时候初始赋值错了导致初始化复杂度过大

可以初始赋值的时候就使用add( i , a[i] )

 

 

转载于:https://www.cnblogs.com/qmcp/p/9175680.html

你可能感兴趣的文章
页面跳转参数不丢失
查看>>
对于 飞林沙的<把Array说透>的扩展
查看>>
使用shell脚本生成只读权限的sql脚本
查看>>
Add SSH Key to GitLab on Windows
查看>>
浙大复试(二)
查看>>
js深入研究之匿名函数
查看>>
Enabling the Dedicated Administrator Connection (DAC) in SQL Server Express
查看>>
[推荐]前端性能分析工具:dynaTrace Ajax Edition
查看>>
泛型算法
查看>>
zabbix监控主机cpu达到80%后报警
查看>>
4.15. gulp-sourcemaps
查看>>
C#实现文件数据库
查看>>
测试用例介绍
查看>>
赛先生:烧,烧,烧,每年70万亩
查看>>
精彩批处理代码
查看>>
2.5. 流量控制
查看>>
编写更好的C#代码
查看>>
new & override 不完全PK
查看>>
HDU1018 Big Number
查看>>
PHP中exit,exit(0),exit(1),exit('0'),exit('1'),die,return的区别
查看>>