#include<bits/stdc++.h>
#define ll long long
using namespace std;
void build(ll a[],ll node, ll l, ll h, ll tree[]){
if(l==h) tree[node] = a[l];
else{
ll m = l + (h-l)/2;
build(a, 2node, l, m, tree);
build(a, 2node + 1, m+1, h, tree);
tree[node] = tree[2node] + tree[2node + 1];
}
}
ll query(ll node, ll start, ll end, ll l, ll r, ll tree[]){
if(l>end || r<start) return 0;
if(l<=start && end<=r) return tree[node];
ll mid = (start+end)/2;
ll p1=query(2node, start, mid, l, r, tree);
ll p2=query(2node+1, mid+1, end, l, r, tree);
return p1+p2;
}
void update(ll node, ll start, ll end, ll l, ll r, ll val, ll tree[]){
if(start>end || start>r || end<l) return;
if(start==end) {tree[node]+=val; return;}
ll mid = start+(end-start)/2;
update(2node, start, mid, l, r, val, tree);
update(2node+1, mid+1, end, l, r, val, tree);
tree[node]=tree[2node]+tree[2node+1];
}
int main(){
ll t; cin>>t;
while(t–){
ll n, k; cin>>n>>k;
ll a[n]={0};
ll tree[2n]={0};
ll lazy[2n]={0};
build(a, 1, 0, n-1, tree);
while(k–){
ll temp; cin>>temp;
if(temp==0){
ll x, y, val; cin>>x>>y>>val;
update(1, 0, n-1, x-1, y-1, val, tree);
}
else{
ll x, y; cin>>x>>y;
cout<<query(1, 0, n-1, x-1, y-1, tree)<<endl;
}
}
//for(int i=0;i< 2*n+1;i++) cout<<tree[i]<<" “;
//int x, y; cin>>x>>y;
//cout<<query(1, 0, n-1, x, y);
//for(auto i:tree) cout<<i<<” ";
}
}
link: https://ide.geeksforgeeks.org/r0eQIYKbix