- 树状数组专题
给坤看一下T6
- @ 2025-8-25 11:56:25
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int n,m;
long long t1[N],t2[N];
int lowbit(int x){
return x&-x;
}
void add(int x,long long k){
for(int i=x;i<=n;i+=lowbit(i)){
t1[i]+=k,t2[i]+=k*x;
}
}
long long ask(int x){
long long sum=0;
for(int i=x;i;i-=lowbit(i)){
sum+=(x+1)*t1[i]-t2[i];
}
return sum;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
add(i,a[i]-a[i-1]);
}
char c;
int l,r;
long long d;
for(int t=1;t<=m;t++){
cin>>c;
if(c=='C'){
cin>>l>>r>>d;
add(l,d);
add(r+1,-d);
}else{
cin>>l>>r;
cout<<ask(r)-ask(l-1)<<endl;
}
}
return 0;
}
0 条评论
目前还没有评论...