社区讨论
Help
学术版参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lvpa0zpx
- 此快照首次捕获于
- 2024/05/02 21:23 2 年前
- 此快照最后确认于
- 2024/05/03 07:15 2 年前
今天无聊练模板
线段树居然挂了
大佬帮忙看看
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,add[100001*4],sum[100001*4];
void Add(int k,int l,int r,int v){
add[k]+=v;
sum[k]+=(r-l+1)*v;
return ;
}
void pushdown(int k,int l,int r,int mid){
if(add[k]==0) return ;
Add(k*2,l,mid,add[k]);
Add(k*2+1,mid+1,r,add[k]);
add[k]=0;
return ;
}
void modify(int k,int l,int r,int x,int y,int v){
if(x<=l and r<=y){
Add(k,l,r,v);
return ;
}
int mid=(l+r)/2;
pushdown(k,l,r,mid);
if(x<=mid) modify(k*2,l,mid,x,y,v);
if(mid<y) modify(k*2+1,mid+1,r,x,y,v);
}
int query(int k,int l,int r,int x,int y){
if(x<=l and r<=y) return sum[k];
int mid=(l+r)/2;
pushdown(k,l,r,mid);
int ans=0;
if(x<=mid) ans+=query(k*2,l,mid,x,y);
if(mid<y) ans+=query(k*2+1,mid+1,r,x,y);
return ans;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x;
cin>>x;
modify(1,1,n,i,i,x);
}
for(int i=1;i<=m;i++){
char opt;
cin>>opt;
if(opt=='C'){//修改
int l,r,x;
cin>>l>>r>>x;
modify(1,1,n,l,r,x);
}else{//查询
int l,r;
cin>>l>>r;
cout<<query(1,1,n,l,r)<<endl;
}
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...