求调!!线段树全部RE
查看原帖
求调!!线段树全部RE
785636
2022_37_yzyUUU楼主2023/12/5 18:11

@zrx5BA

@ljhtomorrow

#include<bits/stdc++.h>
#define ls(p) p<<1
#define rs(p) p<<1|1
#define N 100001
#define int long long
using namespace std;
long long n,w,p,q;char c;
struct segtree{
	long long l,r,num;
}t[N*4];
void op(int p)	{t[p].num=t[ls(p)].num+t[rs(p)].num;}
void build(int p,int l,int r){
	t[p].l=l,t[p].r=r;
	if(l==r){t[p].num=0;return;}
	int mid=l+r>>1;
	build(ls(p),l,mid);
	build(rs(p),mid+1,r);
	op(p);
}

void change(int p,int a,int b){
	if(t[p].l==t[p].r){
		t[p].num+=b;
		return;
	}
	int mid=t[p].l+t[p].r>>1;
	if(mid<=a)change(ls(p),a,b);
	else change(rs(p),a,b);
	op(p);
}
int ask(int p,int a,int b){
	if(t[p].l<=a&&t[p].r<=b){return t[p].num;}
	int ans=0,mid=t[p].l+t[p].r>>1;
	if(a<=mid)ans+=ask(ls(p),a,mid);
	else ans+=ask(rs(p),mid+1,b);
}
signed main(){
	cin>>n>>w;
	build(1,1,n);
	for(int i=1;i<=w;i++){
		cin>>c;
		if(c=='x'){
			cin>>p>>q;
			change(1,p,q);
		}
		else {
			cin>>p>>q;
			cout<<ask(1,p,q)<<"\n";
		}
	}
	return 0;
}
2023/12/5 18:11
加载中...