您的位置:首页 > 其它

树状数组-模板

2012-03-10 19:18 316 查看
一维树状数组

#define lowbit(x) ((x)&(-x))
#define M 1004		//线段的长度或处理的个数
int maxn,c[M];
void update(int p,int d)
{
while(p<=maxn){
c[p]+=d;
p+=lowbit(p);
}
}
int sum(int p)
{
int ans=0;
while(p>0){
ans+=c[p];
p-=lowbit(p);
}
return ans;
}


二维树状数组

#define lowbit(x) ((x)&(-x))
#define M 1004
int maxr,maxc,c[M][M];
void update(int p,int q,int d)
{
int qq=q;	//保存初值
for(;p<=maxr;p+=lowbit(p))
for(q=qq;q<=maxc;q+=lowbit(q))
c[p][q]+=d;
}
int sum(int p,int q)
{
int ans=0,qq=q;
for(;p>0;p-=lowbit(p))
for(q=qq;q>0;q-=lowbit(q))
ans+=c[p][q];
return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: