lowbit

数组的第 i 位存储的是以 i 为结尾的长度为lowbit(i) 的一段的和.

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

加点

int n, bt[maxn];

void btAdd(int pos, int delta) {
for (; pos <= n; pos += lowBit(p)) {
bt[pos] += delta;
}
}

查询

int btSum(int pos) {
int ans = ;
for (; pos; pos -= lowBit(p)) {
ans += bt[p];
}
return ans;
}

完整代码

略有不同的,dad曾经教给我,树状数组这么写

//线段树练习1
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
using namespace std;
int n,m,t[maxn];
void add(int k,int z)
{
while(k<=n)
{
t[k]+=z;
k+=k&(-k);
}
}
int find(int k)
{
int ans=;
while(k)
{
ans+=t[k];
k-=k&(-k);
}
return ans;
}
int main()
{
int i,j,k,x;
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d",&x);
add(i,x);
}
scanf("%d",&m);
for(i=;i<=m;i++)
{
int x,y,z,w;
scanf("%d",&w);
scanf("%d%d",&x,&y);
if(w==)
add(x,y);
else if(w==)
printf("%d\n",find(y)-find(x-));
}
return ;
}
//线段树练习2
#include<iostream>
using namespace std;
int t[],n,m;
void add(int k,int z)
{
while(k<=n)
{
t[k]+=z;
k+=k&(-k);
}
}
int find(int a)
{
int ans=;
while(a)
{
ans+=t[a];
a-=a&(-a);
}
return ans;
}
int main()
{
int s;
cin>>n;
for(int i=;i<=n;i++)
cin>>s,
add(i,s);
cin>>m;
for(int i=;i<=m;i++)
{
int x,y,w,z;
cin>>w;
if(w==)
{
cin>>x;
cout<<find(x)-find(x-)<<endl;
}
if(w==)
{
cin>>x>>y>>z;
for(int j=x;j<=y;j++)
add(j,z);
}
}
}

最新文章

  1. ola.hallengren的SQL Server维护脚本
  2. SQL Server 动态生成数据库所有表Insert语句
  3. BZOJ 2879: [Noi2012]美食节
  4. 测试dockerfile
  5. 数据库性能调优——sql语句优化(转载及整理) —— 篇1
  6. Angularjs简介
  7. jdk\willy\集群安装
  8. uvalive5818 uva12376 As Long as I Learn, I Live
  9. poj 1959 Darts 同意反复组合
  10. KNN算法的代码实现
  11. 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
  12. NOIP2018:The First Step
  13. docker 容器时间跟宿主机时间同步
  14. MVC模式的原理
  15. tobii SDK开发学习
  16. jdbc之Statement和Preparement
  17. System.Threading.Tasks.Task 任务引起的IIS应用程序池崩溃
  18. 3DMAX导出FBX的烘焙动画选项
  19. 往Layout中动态添加View
  20. Netty-EventLoop

热门文章

  1. java集合讲解干货集
  2. Java for LeetCode 138 Copy List with Random Pointer
  3. idea生成可执行jar
  4. Android OpenGL 播放视频学习
  5. 7-6 公路村村通(30 分) 【prime】
  6. mini2440 u-boot禁止蜂鸣器
  7. Spring Boot2.0之多数据源事务管理
  8. 【HDU 4807】Lunch Time 最小费用最大流
  9. codeforces 703D D. Mishka and Interesting sum(树状数组)
  10. TF-IFD算法及python实现关键字提取