求条
查看原帖
求条
772875
RAY091016楼主2025/7/30 19:28

如题,code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[100100],x,y,tot=1;
string op;
struct segtree{
	int l,r,dat,tag;
}t[400400];
void build(int p,int l,int r){
	t[p].l=l,t[p].r=r;
	if(l==r){
		t[p].dat=a[l];
		return ;
	}
	int mid=(l+r)>>1;
	build(2*p,l,mid);
	build(2*p+1,mid+1,r);
	t[p].dat=t[2*p].dat+t[2*p+1].dat;
}
int ask(int p,int l,int r){
	if(l<=t[p].l&&t[p].r<=r){
		return t[p].dat;
	}
	int mid=(t[p].l+t[p].r)>>1,val=0;
	if(l<=mid){
		val+=ask(p*2,l,r);
	}
	if(r>mid){
		val+=ask(p*2+1,l,r);
	}
	return val;
}
void change(int p,int x,int v){
	if(t[p].l==t[p].r){
		t[p].dat=v;
		return ;
	}
	int mid=(t[p].l+t[p].r)>>1;
	if(x<=mid){
		change(p*2,x,v);
	}
	else{
		change(p*2+1,x,v);
	}
	t[p].dat=t[p*2].dat+t[p*2+1].dat;
}
signed main(){
	while(cin>>n&&n!=0){
		if(tot!=1){
			cout<<endl;
		}
		cout<<"Case "<<tot<<":"<<endl;
		tot++;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		build(1,1,n);
		while(cin>>op&&op!="END"){
			cin>>x>>y;
			if(op=="M"){
				cout<<ask(1,x,y)<<endl;
			}
			else{
				change(1,x,y);
			}
		}
	}
	return 0;
}
2025/7/30 19:28
加载中...