您的位置:首页 > 其它

树状数组的小总结

2016-03-24 22:47 253 查看
1.树状数组在很多情况下可以替代线段树,而且树状数组的代码简洁好写,所以能用树状数组的地方我还是会树状数组而不是线段树;

2.树状数组的常用的函数有以下这些:

  

int lowbit(int x)
{
return x&(-x);
}


void update(int x,int num)
{
while(x<=n)
{
sum[x]+=num;
x+=lowbit(x);
}
}
/*从下往上修改,对应线段树的点修改*/
int query(int x)
{
int s=0;
while(x>0)
{
s+=sum[x];
x-=lowbit(x);
}
return s;
}
/*从上向下统计,对应线段树的区间统计*/
void update(int x,int num)
{
while(x>0)
{
d[x]+=num;
x-=lowbit(x);
}
}
/*从上往下修改,需要两次,第二次要把多加的区间减掉我感觉像是线段树的lazy标记,不知道对不对*/
int getSum(int x)
{
int s=0;
while(x<=N)
{
s+=d[x];
x+=lowbit(x);
}
return s;
}
/*点查询,从下向上统计,对应线段树的点查询要加上lazy标记*/


3.某些题目的区间修改可以改成点修改,然后区间查询如hdu1556,poj2155(二维的树状数组好神奇);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: