# Segment Tree (1) dj.a408 ## code ```cpp= #include <bits/stdc++.h> #define AC ios::sync_with_stdio(false),cin.tie(0); #define ll long long #define m (l+r)>>1 using namespace std; int n,q,w,maxn=2e5+1; vector<ll> v(maxn), seg((maxn<<2)|1), tag((maxn<<2)|1); void push(int l, int r, int i){ if(!tag[i]) return; if(r-l==1){seg[i]+=tag[i], tag[i]=0; return;} seg[i]+=(r-l)*tag[i]; tag[i<<1]+=tag[i], tag[i<<1|1]+=tag[i], tag[i]=0; } void build(int l=0, int r=n, int i=1){ if(r-l==1){seg[i]=v[l]; return;} build(l,m,i<<1), build(m,r,i<<1|1); seg[i]=seg[i<<1]+seg[i<<1|1]; } ll query(int ql, int qr, int l=0, int r=n, int i=1){ push(l,r,i); if(qr<=l||ql>=r) return 0; if(ql<=l&&qr>=r) return seg[i]; return query(ql,qr,l,m,i<<1)+query(ql,qr,m,r,i<<1|1); } void modify(int ql, int qr, int val, int l=0, int r=n, int i=1){ push(l,r,i); if(qr<=l||ql>=r) return; if(ql<=l&&qr>=r){tag[i]+=val, push(l,r,i); return;} modify(ql,qr,val,l,m,i<<1), modify(ql,qr,val,m,r,i<<1|1); seg[i]=seg[i<<1]+seg[i<<1|1]; } int main(){ AC cin>>n>>q; for(int i=0;i<n;i++){cin>>v[i];} build(); while(q--){ int x,y,k; cin>>w>>x>>y; if(w) cout<<query(x-1,y)<<'\n'; else cin>>k, modify(x-1,y,k); } } ```