救救孩子吧,this
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
ll t,n,q,c;
struct node{
ll sum,plue,tag;
bool flag;
}tree[N<<2];
#define ls k<<1,l,mid
#define rs k<<1|1,mid+1,r
void pushdown(int k){
if(tree[k].flag){
tree[k<<1].sum=tree[k<<1|1].sum=tree[k].tag;
tree[k<<1].tag=tree[k<<1|1].tag=tree[k].tag;
tree[k<<1].plue=tree[k<<1|1].plue=0;
tree[k<<1].flag=tree[k<<1|1].flag=1;
tree[k].flag=0,tree[k].tag=0;
}
if(tree[k].plue){
tree[k<<1].sum+=tree[k].plue,tree[k<<1|1].sum+=tree[k].plue;
tree[k<<1].plue+=tree[k].plue,tree[k<<1|1].plue+=tree[k].plue;
tree[k].plue=0;
}
}
void change1(int k,int l,int r,int x,int y,ll d){
pushdown(k);
if(x<=l&&r<=y){
tree[k].sum+=d;
tree[k].plue+=d;
return ;
}
int mid=(l+r)>>1;
if(x<=mid)
change1(ls,x,y,d);
if(mid<y)
change1(rs,x,y,d);
return ;
}
void change2(int k,int l,int r,int x,int y,ll d){
pushdown(k);
if(x<=l&&r<=y){
tree[k].sum=d;
tree[k].flag=1;
tree[k].plue=0;
tree[k].tag=d;
return ;
}
int mid=(l+r)>>1;
if(x<=mid)
change1(ls,x,y,d);
if(mid<y)
change1(rs,x,y,d);
return ;
}
ll query(int k,int l,int r,int x){
if(l==r)
return tree[k].sum;
int mid=(l+r)>>1;
pushdown(k);
if(x<=mid)
return query(ls,x);
else
return query(rs,x);
}
int main(){
cin>>t;
ll x,y,z,l;
char op[15];
for(int i=1;i<=t;i++){
printf("Case #%d\n",i);
scanf("%lld%lld%lld",&n,&q,&c);
change2(1,1,n,1,n,c);
while(q--){
scanf("%s",op+1);
l=strlen(op+1);
if(l==3){
scanf("%lld%lld%lld",&x,&y,&z);
change1(1,1,n,x,y,z);
}
else
if(l==5&&op[1]=='m'){
scanf("%lld%lld%lld",&x,&y,&z);
change1(1,1,n,x,y,-z);
}
else
if(l==5&&op[1]=='a'){
scanf("%lld%lld",&x,&y);
change1(1,1,n,x,x,y);
}
else
if(l==7){
scanf("%lld%lld",&x,&y);
change1(1,1,n,x,x,-y);
}
else
if(l==5){
scanf("%lld%lld",&x,&y);
change2(1,1,n,x,x,y);
}
else{
scanf("%lld",&x);
printf("%lld\n",query(1,1,n,x));
}
}
for(int i=0;i<=(N<<2);i++)
tree[i].sum=tree[i].plue=tree[i].tag=tree[i].flag=0;;
puts("");
}
return 0;
}
WA 惹