树状数组代码,70分,3个点TLE,求助大佬帮忙解决
查看原帖
树状数组代码,70分,3个点TLE,求助大佬帮忙解决
308675
franklinwqf楼主2022/8/6 20:06

代码如下:

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[500005],c[500005],i,j,judge;
int lowbit(int x){
	return x&-x;
}
void add(int x,int delta){
	for(int i = x;i<=n;i+=lowbit(i)){
		c[i] += delta;
	}
}
int getsum(int x){
	int ans = 0;
	for(int i = x;i;i-=lowbit(i)){
		ans+=c[i];
	}
	return ans;
}
int main(){
	cin>>n>>m;
	int x,y,k;
	for(int i = 1;i<=n;i++){
		cin>>a[i];
		add(i,a[i]);
	}
	for(int i = 1;i<=m;i++){
		cin>>judge;
		if(judge==1){
			cin>>x>>y>>k;
			for(int i = x;i<=y;i++){
				add(i,k);
			}
		}
		else{
			cin>>x>>y;
			cout<<getsum(y)-getsum(x-1)<<endl;
		}
	}
	return 0;
}

2022/8/6 20:06
加载中...