#include #include using namespace std; using namespace atcoder; #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define int long long signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, Q; cin >> N >> Q; assert(1 <= N && N <= 100000); assert(1 <= Q && Q <= 100000); vector A(N); rep(i, N) { cin >> A[i]; assert(0 <= A[i] && A[i] <= 100000); } int B = (int)(sqrtl(N) + 0.5); vector>> queries((Q + B - 1) / B); rep(q, Q) { int t; cin >> t; assert(t == 1 || t == 2); if (t == 1) { int x, y; cin >> x >> y; assert(1 <= x && x <= N); assert(0 <= y && y <= 100000); --x; queries[q / B].emplace_back(t, x, y, -1, -1); } else { int l, r, a, b; cin >> l >> r >> a >> b; assert(1 <= l && l <= r && r <= N); assert(0 <= a && a <= 100000); assert(0 <= b && b <= 100000); --l; queries[q / B].emplace_back(t, l, r, a, b); } } for (auto& block : queries) { vector ans(block.size()); vector> events; rep(i, N) events.emplace_back(A[i], i, -1, -1, -1); rep(q, block.size()) { auto [t, l, r, a, b] = block[q]; if (t == 1) continue; events.emplace_back(a, l, r, q, 0); events.emplace_back(b, l, r, q, 1); } sort(events.begin(), events.end()); fenwick_tree sum0(N), sum1(N); for (auto [x, l, r, q, t] : events) { if (t == -1) { sum0.add(l, 1); sum1.add(l, x); } else if (t == 0) { ans[q] -= sum1.sum(l, r); ans[q] += x * sum0.sum(l, r); } else { ans[q] += sum1.sum(l, r); ans[q] += x * (r - l - sum0.sum(l, r)); } } unordered_map update_history; rep(q, block.size()) { auto [t, l, r, a, b] = block[q]; if (t == 1) { int x = l; int y = r; update_history[x] = y; } else { if (a > b) { cout << a * (r - l) << '\n'; continue; } for (auto [i, x] : update_history) { if (l <= i && i < r) { ans[q] -= clamp(A[i], a, b); ans[q] += clamp(x, a, b); } } cout << ans[q] << '\n'; } } for (auto [i, x] : update_history) { A[i] = x; } } }