树状数组的三种操作
2016-03-27 13:32
381 查看
直接贴代码
一、改点求段
二、改段求点
三、改段求段`
namespace BIT
{
#define lowbit(x) ((x)&(-x))
#define cl(x) memset(x,0,sizeof(x))
int b[100010],c[100010],maxn;
void init(int n){maxn=n;cl(b);cl(c);}
inline void add(int l,int r,int x)
{
for(int i=r;i;i-=lowbit(i))b[i]+=x;
for(int i=r;i<=maxn;i+=lowbit(i))c[i]+=x*r;
if(l>1)
{
for(int i=l-1;i;i-=lowbit(i))b[i]-=x;
for(int i=l-1;i<=maxn;i+=lowbit(i))c[i]-=x*(l-1);
}
}
inline int sum(int x)
{
int s=0;
if(x>1)
{
for(int i=x;i<=maxn;i+=lowbit(i))s+=b[i];
s*=x;
for(int i=x-1;i;i-=lowbit(i))s+=c[i];
}
return s;
}
inline int sum(int l,int r)
{
return sum(r)-sum(l-1);
}
#undef lowbit
#undef cl
};`
一、改点求段
namespace BIT { #define N 100000 #define lowbit(a) ((a)&(-a)) int c ,num; void init(int n){num=n;} inline void add(int x,int a) { int xx=x; while(xx<=num)c[xx]+=a,xx+=lowbit(xx); } inline int sum(int x) { int sum_=0,xx=x; while(xx)sum_+=c[xx],xx-=lowbit(xx); return sum_; } inline int sum(int l,int r) { return sum(r)-sum(l-1); } #undef N #undef lowbit };
二、改段求点
namespace BIT { #define N 100000 #define lowbit(a) ((a)&(-a)) int c ,b ,num; void init(int n){num=n;} inline void add(int l,int r,int x) { for(int i=l-1;i;i-=lowbit(i))b[i]-=x; for(int i=r;i;i-=lowbit(i))b[i]+=x; } inline int sum(int x) { int s=0; for(int i=x;i<=num;i+=lowbit(i))s+=b[i]; return s; } #undef N #undef lowbit };
三、改段求段`
namespace BIT
{
#define lowbit(x) ((x)&(-x))
#define cl(x) memset(x,0,sizeof(x))
int b[100010],c[100010],maxn;
void init(int n){maxn=n;cl(b);cl(c);}
inline void add(int l,int r,int x)
{
for(int i=r;i;i-=lowbit(i))b[i]+=x;
for(int i=r;i<=maxn;i+=lowbit(i))c[i]+=x*r;
if(l>1)
{
for(int i=l-1;i;i-=lowbit(i))b[i]-=x;
for(int i=l-1;i<=maxn;i+=lowbit(i))c[i]-=x*(l-1);
}
}
inline int sum(int x)
{
int s=0;
if(x>1)
{
for(int i=x;i<=maxn;i+=lowbit(i))s+=b[i];
s*=x;
for(int i=x-1;i;i-=lowbit(i))s+=c[i];
}
return s;
}
inline int sum(int l,int r)
{
return sum(r)-sum(l-1);
}
#undef lowbit
#undef cl
};`
相关文章推荐
- xiaoxin juju needs help
- 栈的实现
- CentOS启动流程详解
- 机房收费系统(VB.NET)——存储过程实战
- CI Library Table
- 对CRITICAL_SECTION理解的总结
- 网络编程----------SOCKET编程实现简单的TCP协议
- HDU 5364 Distribution money
- MVC过滤器详解
- 欢迎使用CSDN-markdown编辑器
- 【总结】2015年总结 2016年计划
- 福克斯保养明细
- Android Studio 本机调试
- 数据库批量修改表名,增加前缀(SQL server)
- css优先级及权重值
- 制作jar文件
- 编程书籍
- 【BZOJ1006】【HNOI2008】神奇的国度
- 《Linux内核分析与实现》 第四周 读书笔记
- hibernate @mappedBy小记