树状数组模板题:一本通1535
2021-04-20 00:31
标签:int scanf 两种 计算 mic 数组 开始 求和 loading 这道题是一道树状数组的模板题,主要考察树状数组的单点修改和区间求和的两种基本操作,只要写好对应的函数,按照读入的内容进行操作即可。首先写好lowbit、update、sum函数。因为之前已经写过了这些函数的写法,这里不再陈述。 然后写主函数即可。读入n、m,以及a数组来存储原数组。对树状数组c数组初始化为0,然后依次对a数组中的数进行update操作。接下来对于每一个操作输入k,若k=1,对第a个数进行update操作加b,若k=0,读入a和b,输出sum(b)-sum(a-1)的值即可。 下面是完整代码: 树状数组模板题:一本通1535 标签:int scanf 两种 计算 mic 数组 开始 求和 loading 原文地址:https://www.cnblogs.com/qianr/p/13253610.htmlint lowbit(int x){
return x&(-x);
}
void update(int x,int v){//在序列第x个位置加上a,并在数状数组中修改相关元素
while(xn){
c[x]+=v;
x+=lowbit(x);
}
return;
}
int sum(int x){//计算序列第一个位置到第x个位置的区间和
int res=0;
while(x>0){
res+=c[x];
x-=lowbit(x);
}
return res;
}
1 #include