想用树状数组实现,求调
查看原帖
想用树状数组实现,求调
502530
_加零_楼主2023/11/16 20:15
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=5e6;
int n,m,tree[maxn];
int lowbit(int k){
	return k & -k;
}
void add(int x,int k){
	while(x<=n){
		tree[x]+=k;
		x+=lowbit(x);
	}
}
int sum(int x){
	int ans=0;
	while(x!=0){
		ans+=tree[x];
		x-=lowbit(x);
	}
	return ans;
}
signed main(){
	cin >> n >> m;
	for(int i=1;i<=n;i++){
		int a;
		cin >> a;
		add(i,a);
	}
	for(int i=1;i<=m;i++){
		int op;
		cin >> op;
		if(op==1){
			int x,y,z;
			cin >> x >> y >> z;
			add(x,z);
			add(y+1,-z);
		}else if(op==2){
            int x,y;
            cin >> x >> y;
			cout << sum(y)-sum(x-1) << endl;
		}
	}
    return 0;
}
2023/11/16 20:15
加载中...