您的位置:首页 > 其它

有一种树叫做线段树,有一种数组叫做树状数组

2014-04-24 18:01 253 查看
近日受到微软编程之美大赛第二题和hdu一些题目变态般的大数据的刺激,而且老是听到群里的一些大神讲什么线段树,树状数组,分桶法呀等等一系列不明觉厉的东西,花了几天好好看了下线段树和树状数组,下面我来分享一些,我的心得和感悟,如有不足之处欢迎大神们前来狂喷。

微软编程之美初赛第一场树题解http://blog.csdn.net/asdfghjkl1993/article/details/24306921

线段树和树状数组都是一种擅长处理区间的数据结构。它们间最大的区别之一就是线段树是一颗完美二叉树,而树状数组(BIT)相当于是线段树中每个节点的右儿子去掉。

如图:

线段树

void init()

{

for(int i=1;i<MAX;i++)

for(int j=1;j<MAX;j++)

{

d[i][j]=1;

c[i][j]=lowbit(i)*lowbit(j);

}

}

int sum(int i,int j)

{

int tot=0;

for(int x=i;x>0;x-=lowbit(x))

for(int y=j;y>0;y-=lowbit(y))

{

tot+=c[x][y];

}

return tot;

}

void add(int i,int j,int v)

{

for(int x=i;x<MAX;x+=lowbit(x))

for(int y=j;y<MAX;y+=lowbit(y))

{

c[x][y]+=v;

}

}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: