#include<bits/stdc++.h>
using namespace std;const int N=10000005;
int a[N],b[N];
int n,m;
int lowbit(int x){return x&(-x);}voidadd(int x,int v){while(x<=n){
b[x]+=v;
x+=lowbit(x);}}voidupdate(int l,int r,int v){//区间修改add(l,v);add(r+1,-v);//记得是l 和 r+1}
int sum(int x){//算第1个位置到第x位置的和
int res=0;while(x){
res+=b[x];
x-=lowbit(x);}return res;}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){
int op;scanf("%d",&op);if(op==0){
int l,r,z;scanf("%d%d",&l,&r,&z);update(l,r,z);}if(op==1){
int k;scanf("%d",&k);printf("%d\n",sum(k)-sum(k-1));}}return0;}
区间修改 区间查询
输入n个点 有m个关系
下面 m行
输入 0 x y z 表示 区间x~y 加上z
输入1 x y 表示查询区间x~y的和
#include<bits/stdc++.h>
using namespace std;const int N=10000005;
int a[N],b[N];
int n,m;
int lowbit(int x){return x&(-x);}voidadd(int x,int v){while(x<=n){
b[x]+=v;
x+=lowbit(x);}}voidupdate(int l,int r,int v){//区间修改add(l,v);add(r+1,-v);//记得是 l 和 r+1}
int sum(int x){//算第1个位置到第x位置的和
int res=0;while(x){
res+=b[x];
x-=lowbit(x);}return res;}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){
int op;scanf("%d",&op);if(op==0){
int l,r,z;scanf("%d%d%d",&l,&r,&z);update(l,r,z);}if(op==1){
int l;int r;scanf("%d%d",&l,&r);printf("%d\n",sum(r)-sum(l-1));//区间查询}}return0;}
树状数组区间修改 单点查询输入n个点 有m个关系下面 m行输入 0 x y z 表示 区间x~y 加上z输入1 x 表示查询x点的值#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int N=10000005;int a[N],b[N];int n,m;int lowbit(int x) { return...