//#include #incldue < iostream > #define MAX 4000000 using namespace std; typedef long long ll; void ConsTree(ll arr[], ll segtree[], ll low, ll high, ll pos) { if (low == high) { segtree[pos] = arr[low]; return; } ll mid = (low + high) / 2; ConsTree(arr, segtree, low, mid, 2 * pos + 1); ConsTree(arr, segtree, mid + 1, high, 2 * pos + 2); segtree[pos] = segtree[2 * pos + 1] + segtree[2 * pos + 2]; } ll query(ll segtree[], ll lazy[], ll qlow, ll qhigh, ll low, ll high, ll pos) { if (low > high) return 0; if (qlow > high || qhigh < low) return 0; if (lazy[pos] != 0) { segtree[pos] += lazy[pos] * (high - low + 1); if (low != high) { lazy[2 * pos + 1] += lazy[pos]; lazy[2 * pos + 2] += lazy[pos]; } lazy[pos] = 0; } if (qlow <= low && qhigh >= high) return segtree[pos]; ll mid = (low + high) / 2; return query(segtree, lazy, qlow, qhigh, low, mid, 2 * pos + 1) + query(segtree, lazy, qlow, qhigh, mid + 1, high, 2 * pos + 2); } void update(ll segtree[], ll lazy[], ll start, ll end, ll delta, ll low, ll high, ll pos) { if (low > high) return; if (lazy[pos] != 0) { segtree[pos] += lazy[pos] * (high - low + 1); if (low != high) { lazy[2 * pos + 1] += lazy[pos]; lazy[2 * pos + 2] += lazy[pos]; } lazy[pos] = 0; } if (start > high || end < low) return; if (start <= low && end >= high) { segtree[pos] += delta * (high - low + 1); if (low != high) { lazy[2 * pos + 1] += delta; lazy[2 * pos + 2] += delta; } return; } ll mid = (low + high) / 2; update(segtree, lazy, start, end, delta, low, mid, 2 * pos + 1); update(segtree, lazy, start, end, delta, mid + 1, high, 2 * pos + 2); segtree[pos] = segtree[2 * pos + 1] + segtree[2 * pos + 2]; } int main() { ll n, c; scanf("%lld %lld", &n, &c); ll arr[n] = {0}, p, q, v, choice; ll segtree[MAX], lazy[MAX] = {0}; ConsTree(arr, segtree, 0, n - 1, 0); while (c--) { scanf("%lld", &choice); if (choice == 0) { scanf("%lld %lld %lld", &p, &q, &v); update(segtree, lazy, p - 1, q - 1, v, 0, n - 1, 0); } else { scanf("%lld %lld", &p, &q); printf("%lld\n", query(segtree, lazy, p - 1, q - 1, 0, n - 1, 0)); } } return 0; }