#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
int n, q;
int a[N];
ll seg[4 * N]; // seg[id] = tổng đoạn [l, r]
ii lazy[4 * N]; // lazy[id] = {cnt, C}: đoạn [l, r] cần cộng (tổng từ l tới r) cnt lần
// : mỗi phần tử trong đoạn [l, r] cần trừ đi cho C
void build(int id, int l, int r) {
if (l == r) {
seg[id] = a[l];
return;
}
int mid = (l + r) >> 1;
build(id << 1, l, mid);
build(id << 1 | 1, mid + 1, r);
seg[id] = seg[id << 1] + seg[id << 1 | 1];
}
void push(int id, int l, int r) {
if (lazy[id].first > 0) {
int mid = (l + r) >> 1;
seg[id << 1] += 1ll * (mid + l) * (mid - l + 1) / 2 * lazy[id].first;
seg[id << 1] -= 1ll * (mid - l + 1) * lazy[id].second;
lazy[id << 1].first += lazy[id].first;
lazy[id << 1].second += lazy[id].second;
seg[id << 1 | 1] += 1ll * (r + mid + 1) * (r - mid) / 2 * lazy[id].first;
seg[id << 1 | 1] -= 1ll * (r - mid) * lazy[id].second;
lazy[id << 1 | 1].first += lazy[id].first;
lazy[id << 1 | 1].second += lazy[id].second;
lazy[id] = {0, 0};
}
}
void update(int id, int l, int r, int u, int v, ll C) {
if (l > v || r < u) return;
if (u <= l && r <= v) {
seg[id] += 1ll * (r + l) * (r - l + 1) / 2;
seg[id] -= 1ll * (r - l + 1) * C;
lazy[id].first++, lazy[id].second += C;
return;
}
push(id, l, r);
int mid = (l + r) >> 1;
update(id << 1, l, mid, u, v, C);
update(id << 1 | 1, mid + 1, r, u, v, C);
seg[id] = seg[id << 1] + seg[id << 1 | 1];
}
ll get(int id, int l, int r, int u, int v) {
if (l > v || r < u) return 0;
if (u <= l && r <= v) return seg[id];
push(id, l, r);
int mid = (l + r) >> 1;
return get(id << 1, l, mid, u, v) + get(id << 1 | 1, mid + 1, r, u, v);
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
build(1, 1, n);
while (q--) {
int type, l, r;
cin >> type >> l >> r;
if (type == 1) {
update(1, 1, n, l, r, l - 1);
}
else {
cout << get(1, 1, n, l, r) << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8bGwsIGxsPiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAyZTUgKyA1OyAKCmludCBuLCBxOyAgCmludCBhW05dOyAKCmxsIHNlZ1s0ICogTl07ICAvLyBzZWdbaWRdICA9IHThu5VuZyDEkW/huqFuIFtsLCByXQppaSBsYXp5WzQgKiBOXTsgLy8gbGF6eVtpZF0gPSB7Y250LCBDfTogxJFv4bqhbiBbbCwgcl0gY+G6p24gY+G7mW5nICh04buVbmcgdOG7qyBsIHThu5tpIHIpIGNudCBs4bqnbgoJCQkJLy8gICAgICAgICAgICAgICAgICAgIDogbeG7l2kgcGjhuqduIHThu60gdHJvbmcgxJFv4bqhbiBbbCwgcl0gY+G6p24gdHLhu6sgxJFpIGNobyBDCgp2b2lkIGJ1aWxkKGludCBpZCwgaW50IGwsIGludCByKSB7CglpZiAobCA9PSByKSB7CgkJc2VnW2lkXSA9IGFbbF07IAoJCXJldHVybjsgCgl9CgoJaW50IG1pZCA9IChsICsgcikgPj4gMTsgCglidWlsZChpZCA8PCAxLCBsLCBtaWQpOyAKCWJ1aWxkKGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByKTsgCgoJc2VnW2lkXSA9IHNlZ1tpZCA8PCAxXSArIHNlZ1tpZCA8PCAxIHwgMV07IAp9Cgp2b2lkIHB1c2goaW50IGlkLCBpbnQgbCwgaW50IHIpIHsKCWlmIChsYXp5W2lkXS5maXJzdCA+IDApIHsKCQlpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAgCgoJCXNlZ1tpZCA8PCAxXSArPSAxbGwgKiAobWlkICsgbCkgKiAobWlkIC0gbCArIDEpIC8gMiAqIGxhenlbaWRdLmZpcnN0OyAgCgkJc2VnW2lkIDw8IDFdIC09IDFsbCAqIChtaWQgLSBsICsgMSkgKiBsYXp5W2lkXS5zZWNvbmQ7ICAKCQlsYXp5W2lkIDw8IDFdLmZpcnN0ICs9IGxhenlbaWRdLmZpcnN0OyAgCgkJbGF6eVtpZCA8PCAxXS5zZWNvbmQgKz0gbGF6eVtpZF0uc2Vjb25kOyAgIAoKCQlzZWdbaWQgPDwgMSB8IDFdICs9IDFsbCAqIChyICsgbWlkICsgMSkgKiAociAtIG1pZCkgLyAyICogbGF6eVtpZF0uZmlyc3Q7ICAgCgkJc2VnW2lkIDw8IDEgfCAxXSAtPSAxbGwgKiAociAtIG1pZCkgKiBsYXp5W2lkXS5zZWNvbmQ7ICAgCgkJbGF6eVtpZCA8PCAxIHwgMV0uZmlyc3QgKz0gbGF6eVtpZF0uZmlyc3Q7ICAKCQlsYXp5W2lkIDw8IDEgfCAxXS5zZWNvbmQgKz0gbGF6eVtpZF0uc2Vjb25kOyAKCQkKCQlsYXp5W2lkXSA9IHswLCAwfTsgCgl9Cn0KCnZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYsIGxsIEMpIHsKCWlmIChsID4gdiB8fCByIDwgdSkgcmV0dXJuOyAgCgoJaWYgKHUgPD0gbCAmJiByIDw9IHYpIHsKCQlzZWdbaWRdICs9IDFsbCAqIChyICsgbCkgKiAociAtIGwgKyAxKSAvIDI7IAoJCXNlZ1tpZF0gLT0gMWxsICogKHIgLSBsICsgMSkgKiBDOyAgCgkJbGF6eVtpZF0uZmlyc3QrKywgbGF6eVtpZF0uc2Vjb25kICs9IEM7IAoJCXJldHVybjsgCgl9CgoJcHVzaChpZCwgbCwgcik7ICAKCglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCXVwZGF0ZShpZCA8PCAxLCBsLCBtaWQsIHUsIHYsIEMpOyAKCXVwZGF0ZShpZCA8PCAxIHwgMSwgbWlkICsgMSwgciwgdSwgdiwgQyk7IAoKCXNlZ1tpZF0gPSBzZWdbaWQgPDwgMV0gKyBzZWdbaWQgPDwgMSB8IDFdOyAKfQoKbGwgZ2V0KGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpIHsKCWlmIChsID4gdiB8fCByIDwgdSkgcmV0dXJuIDA7IAoKCWlmICh1IDw9IGwgJiYgciA8PSB2KSByZXR1cm4gc2VnW2lkXTsgCgoJcHVzaChpZCwgbCwgcik7IAoKCWludCBtaWQgPSAobCArIHIpID4+IDE7IAoJcmV0dXJuIGdldChpZCA8PCAxLCBsLCBtaWQsIHUsIHYpICsgZ2V0KGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByLCB1LCB2KTsgCn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7ICAJCgljaW4gPj4gbiA+PiBxOyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07IAoKCWJ1aWxkKDEsIDEsIG4pOyAgCgoJd2hpbGUgKHEtLSkgewoJCWludCB0eXBlLCBsLCByOyAKCQljaW4gPj4gdHlwZSA+PiBsID4+IHI7IAoKCQlpZiAodHlwZSA9PSAxKSB7CgkJCXVwZGF0ZSgxLCAxLCBuLCBsLCByLCBsIC0gMSk7ICAKCQl9CgkJZWxzZSB7CgkJCWNvdXQgPDwgZ2V0KDEsIDEsIG4sIGwsIHIpIDw8ICdcbic7IAoJCX0KCX0KfQ==