#include #include #include #include #include #include using namespace std; using namespace atcoder; using ll = long long; ll op(ll a, ll b) { return a + b; } ll e() { return 0; } int main() { ll n, q; scanf("%lld %lld", &n, &q); vector as(n); for (auto &a : as) { scanf("%lld", &a); } vector> as_sorted(n); for (ll i = 0; i < n; i++) { as_sorted[i] = {i, as[i]}; } sort(as_sorted.begin(), as_sorted.end(), [](auto &a, auto &b) { return a.second > b.second; }); segtree tree(n), cnt(n); vector> qs; for (ll i = 0; i < q; i++) { ll t, l, r, x; scanf("%lld %lld %lld %lld", &t, &l, &r, &x); qs.push_back({i, l - 1, r, x}); } sort(qs.begin(), qs.end(), [](auto &a, auto &b) { return get<3>(a) > get<3>(b); }); vector ans(q, 0); ll k = 0; for (auto &[i, l, r, x] : qs) { while (k < n && as_sorted[k].second >= x) { tree.set(as_sorted[k].first, as_sorted[k].second); cnt.set(as_sorted[k].first, 1); k++; } ans[i] = tree.prod(l, r) - x * cnt.prod(l, r); } for (ll i = 0; i < q; i++) { printf("%lld\n", ans[i]); } }