Untitled

                Never    
C++
       
#include <bits/stdc++.h>

using namespace std;

#define int long long 

const int N = 1e5;
int n, q, tree[4*N + 5], lazy[4*N + 5];

void extend(int v, int tl, int tr) {
	int tm = (tl + tr)/2;
	tree[v*2] += (tm - tl + 1)*lazy[v], tree[v*2 + 1] += (tr - tm)*lazy[v];
	lazy[v*2] += lazy[v], lazy[v*2 + 1] += lazy[v];
	lazy[v] = 0;
}

void update(int v, int tl, int tr, int l, int r, int x) {
	if (l > r) return;
	else if (tl == l && tr == r) tree[v] += (r - l + 1)*x, lazy[v] += x;
	else {
		extend(v, tl, tr);
		int tm = (tl + tr)/2;
		update(v*2, tl, tm, l, min(tm, r), x);
		update(v*2 + 1, tm + 1, tr, max(l, tm + 1), r, x);
		tree[v] = tree[v*2] + tree[v*2 + 1];
	}
}

int query(int v, int tl, int tr, int l, int r) {
	if (l > r) return 0;
	else if (tl == l && tr == r)return tree[v];
	else {
		extend(v, tl, tr);
		int tm = (tl + tr)/2;
		return query(v*2, tl, tm, l, min(tm, r)) + query(v*2 + 1, tm + 1, tr, max(l, tm + 1), r);
	}
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int t;
	cin >> t;
	while (t--) {
		cin >> n >> q;
		memset(tree, 0, sizeof(tree));
		memset(lazy, 0, sizeof(lazy));
		while (q--) {
			int type;
			cin >> type;
			if (type == 0) {
				int l, r, v;
				cin>> l >> r >> v;
				update(1, 1, n, l, r, v);
			} else {
				int l, r;
				cin >> l >> r;
				cout << query(1, 1, n, l, r) << '\n';
			}
		}
	}
	return 0;
}

Raw Text