czh012 @ 2025-01-11 15:07:57
WA70,求大佬帮助
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
long long n,m,c,s,r,o,d,a[N];
struct node{
long long l,r,sum,tag;
}tre[N<<2];
void pushup(long long num){
tre[num].sum=tre[num<<1].sum+tre[num<<1|1].sum;
}
void pushdown(long long num){
if(tre[num].tag!=0){
tre[num<<1].tag+=tre[num].tag;
tre[num<<1|1].tag+=tre[num].tag;
tre[num<<1].sum+=tre[num].tag*(tre[num<<1].r-tre[num<<1].l+1);
tre[num<<1|1].sum+=tre[num].tag*(tre[num<<1|1].r-tre[num<<1|1].l+1);
tre[num].tag=0;
}
}
void build(long long num,long long ll,long long rr){
tre[num].l=ll;
tre[num].r=rr;
tre[num].tag=0;
if(ll==rr){
tre[num].sum=a[ll];
return ;
}
int mid=ll+rr>>1;
build(num<<1,ll,mid);
build(num<<1|1,mid+1,rr);
pushup(num);
}
void modify(long long num,long long L,long long R,long long x){
if(tre[num].r<L||tre[num].l>R)return ;
if(tre[num].l>=L && tre[num].r<=R){
tre[num].sum+=(tre[num].r-tre[num].l+1)*x;
tre[num].tag+=x;
return ;
}
pushdown(num);
modify(num<<1,L,R,x);
modify(num<<1|1,L,R,x);
pushup(num);
}
int query(long long num,long long L,long long R){
if(tre[num].r<L||tre[num].l>R)return 0;
if(tre[num].l>=L && tre[num].r<=R)return tre[num].sum;
pushdown(num);
return query(num<<1,L,R)+query(num<<1|1,L,R);
}
int main(){
cin>>c>>r;
for(int i=1;i<=c;i++){
cin>>a[i];
}
build(1,1,c);
while(r--){
cin>>s;
if(s==1){
cin>>o>>d>>n;
modify(1,o,d,n);
}
else{
cin>>o>>d;
cout<<query(1,o,d)<<endl;
}
}
return 0;
}
by Shirasu_Azusa_ @ 2025-01-11 15:22:51
query
不用开 long long
的吗bro
by czh012 @ 2025-01-11 15:34:34
@ShirasuAzusa Thank you