#include using namespace std; struct binary_indexed_tree{ int N; vector BIT; binary_indexed_tree(vector A){ N = A.size(); BIT = vector(N + 1, 0); for (int i = 0; i < N; i++){ BIT[i + 1] = A[i]; } for (int i = 1; i < N; i++){ if (i + (i & -i) <= N){ BIT[i + (i & -i)] += BIT[i]; } } } void add(int i, int x){ i++; while (i <= N){ BIT[i] += x; i += i & -i; } } long long sum(int i){ long long ans = 0; while (i > 0){ ans += BIT[i]; i -= i & -i; } return ans; } long long sum(int L, int R){ return sum(R) - sum(L); } }; int main(){ int N, Q; cin >> N >> Q; vector a(N); for (int i = 0; i < N; i++){ cin >> a[i]; } vector l(Q), r(Q), x(Q); for (int i = 0; i < Q; i++){ int t; cin >> t >> l[i] >> r[i] >> x[i]; l[i]--; } binary_indexed_tree BIT1(a), BIT2(vector(N, 1)); vector> T; for (int i = 0; i < N; i++){ T.push_back(make_tuple(a[i], 0, i)); } for (int i = 0; i < Q; i++){ T.push_back(make_tuple(x[i], 1, i)); } sort(T.begin(), T.end()); vector ans(Q); for (int i = 0; i < N + Q; i++){ int X = get<0>(T[i]); int t = get<1>(T[i]); int id = get<2>(T[i]); if (t == 0){ BIT1.add(id, -a[id]); BIT2.add(id, -1); } if (t == 1){ ans[id] = BIT1.sum(l[id], r[id]) - BIT2.sum(l[id], r[id]) * X; } } for (int i = 0; i < Q; i++){ cout << ans[i] << endl; } }