//树状数组//支持给某位置增加常数与查询前缀和#include#include #include #include #include #include using namespace std;int n,a[1001],tree[1001];//tree树状数组 int lowbit(int x)//表示2^k k是二进制数x的末尾0个数{ return x&(-x); }int query(int x){ int sum=0; int time=lowbit(x); for(int i=x;i>0;i-=time) sum+=tree[i]; return sum;} int add(int x,int y){ int time=lowbit(x); for(int i=x;i<=n;i+=time) tree[i]+=y;}int main(){ cin>>n; for(int i=1;i<=n;i++)//初始化1 { cin>>a[i]; add(i,a[i]); } //单位置修改+区间求和[L~R] { add(x,y); a[i]=y; int ans=query(R)-query(L-1); } for(int i=1;i<=n;i++)//初始化2 { cin>>a[i]; add(i,a[i]-a[i-1]); } //区间修改[L~R]+单位置查询 { add(L,y); add(R+1,-y); int ans=query(x); } return 0;}