Why?
查看原帖
Why?
1037981
封禁用户楼主2024/6/20 21:22
#include<bits/stdc++.h>
#define N 100005
using namespace std;
int sum[N*4],n,m,laz[N*4],w[N];
void build(int o,int l,int r){
	if(l==r){
		sum[o]=w[l];
		return ;
	}
	int mid=l+r>>1;
	build(o<<1,l,mid);
	build(o<<1|1,mid+1,r);
	sum[o]=sum[o<<1]+sum[o<<1|1];
}
void pushdown(int o,int l,int r){
	if(laz[o]){
		int mid=l+r>>1;
		laz[o<<1]+=laz[o];
		laz[o<<1|1]+=laz[o];
		sum[o<<1]+=laz[o]*(mid-l+1);
		sum[o<<1|1]+=laz[o]*(r-mid);
		laz[o]=0;
	}
}
void update(int o,int l,int r,int x,int c){
	if(l==r){
		sum[o]+=c;
		return ;
	}
	int mid=l+r>>1;
	if(x<=mid) update(o<<1,l,mid,x,c);
	else update(o<<1|1,mid+1,r,x,c);
	sum[o]=sum[o<<1]+sum[o<<1|1];
}
int query(int o,int l,int r,int a,int b){
	if(a<=l&&b>=r){
		return sum[o];
	}
	pushdown(o,l,r);
	int mid=l+r>>1,ans=0;
	if(a<=mid) ans+=query(o<<1,l,mid,a,b);
	if(b>mid) ans+=query(o<<1|1,mid+1,r,a,b);
	return ans;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	build(1,1,n);
	for(int i=1;i<=m;i++){
		char c;
		int x,y;
		cin>>c>>x>>y;
		if(c=='x'){
			update(1,1,n,x,y);
		}else if(c=='y'){
			cout<<query(1,1,n,x,y)<<'\n';
		}
	}
}
2024/6/20 21:22
加载中...