码迷,mamicode.com
首页 > 编程语言 > 详细

树状数组简述

时间:2018-06-13 00:56:58      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:复杂度   树状   bit   pos   个数   数组   int   图片   ret   

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

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

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

lowbit即是x & -x

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

技术分享图片 

具体算法的话就是两个

一个是修改函数如下

void add(int pos, int w)

{

while(pos <= n)

{

c[pos]+=w;

pos+=lowbit(pos);

}

}

一个是查询如下

int sum(int pos)

{

int ret = 0;

while (pos > 0)

{

ret+=c[pos];

pos-=lowbit(pos);

}

return ret;

}

很好写也易于理解

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

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

 

 

树状数组简述

标签:复杂度   树状   bit   pos   个数   数组   int   图片   ret   

原文地址:https://www.cnblogs.com/qmcp/p/9175680.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!