如题,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;
}