70开O2wa,不开MLE
查看原帖
70开O2wa,不开MLE
567432
WeiYangLu楼主2022/10/19 20:31
#include<bits/stdc++.h>
using namespace std;
int f[2000005],a[100005];
int n,m;
inline void build(int k,int l,int r) {
	if(l==r) {
		f[k]=a[l];
		return;
	}
	int mid=(l+r)>>1;
	build(k+k,l,mid);
	build(k+k+1,mid+1,r);
	f[k]=f[k+k]+f[k+k+1];
}
inline void add(int k,int l,int r,int x,int y) {
	f[k]+=y;
	if(l==r) return;
	int mid=(l+r)>>1;
	if(x<=mid)
		add(k+k,l,mid,x,y);
	else
		add(k+k+1,mid+1,r,x,y);
}
int calc(int k,int l,int r,int s,int t) {
	if(s<=l&&r<=t)
		return f[k];
	int mid=(l+r)>>1,ans=0;
	if(s<=mid) ans+= calc(k+k,l,mid,s,t);
	if(t>mid) ans+= calc(k+k+1,mid+1,r,s,t);
	return ans;
}
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		cin>>a[i];
	build(1,1,n);
	for(int i=1; i<=m; i++) {
		int opt,x,y;
		cin>>opt>>x>>y;
		if(opt==1) add(1,1,n,x,y);
		else cout<<calc(1,1,n,x,y)<<"\n";
	}
	return 0;
}
2022/10/19 20:31
加载中...