线段树
不带lazy
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll tr[1000000],a[1000000],ans[1000000],lazy[1000000];
void bui(ll id,ll l,ll r){
if(l==r){
tr[id]=a[l];
return;
}
ll mid=(l+r)>>1;
bui(id*2,l,mid);
bui(id*2+1,mid+1,r);
tr[id]=tr[id*2]+tr[id*2+1];
}
ll find(ll id,ll l,ll r,ll x,ll y){
if(l>y||r<x)return 0;
if(x<=l&&r<=y){
return tr[id];
}
ll mid=(l+r)>>1;
ll ans=0;
if(x<=mid){
ans+=find(id*2,l,mid,x,y);
}
if(y>mid){
ans+=find(id*2+1,mid+1,r,x,y);
}
return ans;
}
void gx(ll id,ll l,ll r,ll x,ll y,ll z){
if(r<x||l>y)return;
if(l==r){
tr[id]+=z;
return;
}
ll mid=(l+r)>>1;
if(x<=mid){
gx(id*2,l,mid,x,y,z);
}
if(y>mid){
gx(id*2+1,mid+1,r,x,y,z);
}
tr[id]=tr[id*2]+tr[id*2+1];
}
int main(){
ll n,m,x,y,z;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
bui(1,1,n);
while(m--){
cin>>x;
if(x==1){
cin>>x>>y>>z;
gx(1,1,n,x,y,z);
// cout<<tr[1]<<endl;
}
else{
cin>>x>>y;
cout<<find(1,1,n,x,y)<<endl;
}
}
}
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll tr[1000000],a[1000000],ans[1000000],lazy[1000000];
void bui(ll id,ll l,ll r){
if(l==r){
tr[id]=a[l];
return;
}
ll mid=(l+r)>>1;
bui(id*2,l,mid);
bui(id*2+1,mid+1,r);
tr[id]=tr[id*2]+tr[id*2+1];
}
void f(ll id,ll l,ll r,ll c){
lazy[id]+=c;
tr[id]+=(r-l+1)*c;
}
void push_down(ll id,ll l,ll r){
ll mid=(l+r)>>1;
f(id*2,l,mid,lazy[id]);
f(id*2+1,mid+1,r,lazy[id]);
lazy[id]=0;
}
ll find(ll id,ll l,ll r,ll x,ll y){
if(l>y||r<x)return 0;
if(x<=l&&r<=y){
return tr[id];
}
push_down(id,l,r);
ll mid=(l+r)>>1;
ll ans=0;
if(x<=mid){
ans+=find(id*2,l,mid,x,y);
}
if(y>mid){
ans+=find(id*2+1,mid+1,r,x,y);
}
return ans;
}
void gx(ll id,ll l,ll r,ll x,ll y,ll z){
if(r<x||l>y)return;
if(x<=l&&r<=y){
tr[id]+=z*(r-l+1);
lazy[id]+=z;
return;
}
push_down(id,l,r);
ll mid=(l+r)>>1;
if(x<=mid){
gx(id*2,l,mid,x,y,z);
}
if(y>mid){
gx(id*2+1,mid+1,r,x,y,z);
}
tr[id]=tr[id*2]+tr[id*2+1];
}
int main(){
ll n,m,x,y,z;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
bui(1,1,n);
while(m--){
cin>>x;
if(x==1){
cin>>x>>y>>z;
gx(1,1,n,x,y,z);
}
else{
cin>>x>>y;
cout<<find(1,1,n,x,y)<<endl;
}
}
}
FOR WHAT???!!!