#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1e5 + 5;
const int BLOCK_SIZE = 320;
int n;
long long a[MAX_N];
long long bl[MAX_N / BLOCK_SIZE + 5];
long long s[MAX_N / BLOCK_SIZE + 5];
void blockUpdate(int l, int r, int val){
for(int i = l; i <= r; i++)
bl[i] += val;
}
void manualUpdate(int id, int l, int r, int val){
int L = id * BLOCK_SIZE;
int R = min(n - 1, (id + 1) * BLOCK_SIZE - 1);
// cout << L << " " << R << endl;
for(int i = L; i <= R; i++)
a[i] += bl[id];
for(int i = l; i <= r; i++)
a[i] += val;
s[id] = 0;
for(int i = L; i <= R; i++)
s[id] += a[i];
bl[id] = 0;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int q;
cin >> n >> q;
for(int i = 0; i < n; i++)
cin >> a[i],
s[i / BLOCK_SIZE] += a[i];
while(q--){
int query;
cin >> query;
// cout << query << "\n";
if(query == 1){
int l, r, val;
cin >> l >> r >> val;
// cout << query << " " << l << " " << r << " " << val << '\n';
--l, --r;
int blockL = l / BLOCK_SIZE;
int blockR = r / BLOCK_SIZE;
if(blockL != blockR){
blockUpdate(blockL + 1, blockR - 1, val);
// L -> end block L
manualUpdate(blockL, l, (blockL + 1) * BLOCK_SIZE - 1, val);
// start block R -> R
manualUpdate(blockR, blockR * BLOCK_SIZE, r, val);
}
else
manualUpdate(blockR, l, r, val);
}
else{
int l, r;
cin >> l >> r;
--l, --r;
// cout << query << " " << l << " " << r << " " << '\n';
int blockL = l / BLOCK_SIZE;
int blockR = r / BLOCK_SIZE;
long long ans = 0;
if(blockL == blockR){
for(int i = l; i <= r; i++)
ans += a[i] + bl[blockL];
cout << ans << '\n';
continue;
}
for(int i = blockL + 1; i <= blockR - 1; i++)
ans += s[i] + bl[i] * BLOCK_SIZE;
for(int i = l, endP = (blockL + 1) * BLOCK_SIZE - 1; i <= endP; i++)
ans += a[i] + bl[blockL];
for(int i = blockR * BLOCK_SIZE; i <= r; i++)
ans += a[i] + bl[blockR];
cout << ans << '\n';
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNQVhfTiA9IDFlNSArIDU7CmNvbnN0IGludCBCTE9DS19TSVpFID0gMzIwOwoKaW50IG47CmxvbmcgbG9uZyBhW01BWF9OXTsKbG9uZyBsb25nIGJsW01BWF9OIC8gQkxPQ0tfU0laRSArIDVdOwpsb25nIGxvbmcgc1tNQVhfTiAvIEJMT0NLX1NJWkUgKyA1XTsKCnZvaWQgYmxvY2tVcGRhdGUoaW50IGwsIGludCByLCBpbnQgdmFsKXsKICBmb3IoaW50IGkgPSBsOyBpIDw9IHI7IGkrKykKICAgIGJsW2ldICs9IHZhbDsKfQoKdm9pZCBtYW51YWxVcGRhdGUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB2YWwpewogIGludCBMID0gaWQgKiBCTE9DS19TSVpFOwogIGludCBSID0gbWluKG4gLSAxLCAoaWQgKyAxKSAqIEJMT0NLX1NJWkUgLSAxKTsKCiAgLy8gY291dCA8PCBMIDw8ICIgIiA8PCBSIDw8IGVuZGw7CgogIGZvcihpbnQgaSA9IEw7IGkgPD0gUjsgaSsrKQogICAgYVtpXSArPSBibFtpZF07CgogIGZvcihpbnQgaSA9IGw7IGkgPD0gcjsgaSsrKQogICAgYVtpXSArPSB2YWw7CgogIHNbaWRdID0gMDsKICBmb3IoaW50IGkgPSBMOyBpIDw9IFI7IGkrKykKICAgIHNbaWRdICs9IGFbaV07CgogIGJsW2lkXSA9IDA7Cn0KCmludCBtYWluKCl7CiAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICBjaW4udGllKDApOwogIGNvdXQudGllKDApOwoKICBpbnQgcTsKICBjaW4gPj4gbiA+PiBxOwoKICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgY2luID4+IGFbaV0sCiAgICBzW2kgLyBCTE9DS19TSVpFXSArPSBhW2ldOwoKICB3aGlsZShxLS0pewogICAgaW50IHF1ZXJ5OwogICAgY2luID4+IHF1ZXJ5OwoKICAgIC8vIGNvdXQgPDwgcXVlcnkgPDwgIlxuIjsKCiAgICBpZihxdWVyeSA9PSAxKXsKICAgICAgaW50IGwsIHIsIHZhbDsKICAgICAgY2luID4+IGwgPj4gciA+PiB2YWw7CgogICAgICAvLyBjb3V0IDw8IHF1ZXJ5IDw8ICIgIiA8PCBsIDw8ICIgIiA8PCByIDw8ICIgIiA8PCB2YWwgPDwgJ1xuJzsKCiAgICAgIC0tbCwgLS1yOwoKICAgICAgaW50IGJsb2NrTCA9IGwgLyBCTE9DS19TSVpFOwogICAgICBpbnQgYmxvY2tSID0gciAvIEJMT0NLX1NJWkU7CgogICAgICBpZihibG9ja0wgIT0gYmxvY2tSKXsKICAgICAgICBibG9ja1VwZGF0ZShibG9ja0wgKyAxLCBibG9ja1IgLSAxLCB2YWwpOwogICAgICAgIC8vIEwgLT4gZW5kIGJsb2NrIEwKICAgICAgICBtYW51YWxVcGRhdGUoYmxvY2tMLCBsLCAoYmxvY2tMICsgMSkgKiBCTE9DS19TSVpFIC0gMSwgdmFsKTsKICAgICAgICAvLyBzdGFydCBibG9jayBSIC0+IFIKICAgICAgICBtYW51YWxVcGRhdGUoYmxvY2tSLCBibG9ja1IgKiBCTE9DS19TSVpFLCByLCB2YWwpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBtYW51YWxVcGRhdGUoYmxvY2tSLCBsLCByLCB2YWwpOwogICAgfQoKICAgIGVsc2V7CiAgICAgIGludCBsLCByOwogICAgICBjaW4gPj4gbCA+PiByOwogICAgICAtLWwsIC0tcjsKCiAgICAgIC8vIGNvdXQgPDwgcXVlcnkgPDwgIiAiIDw8IGwgPDwgIiAiIDw8IHIgPDwgIiAiIDw8ICdcbic7CgogICAgICBpbnQgYmxvY2tMID0gbCAvIEJMT0NLX1NJWkU7CiAgICAgIGludCBibG9ja1IgPSByIC8gQkxPQ0tfU0laRTsKICAgICAgbG9uZyBsb25nIGFucyA9IDA7CgogICAgICBpZihibG9ja0wgPT0gYmxvY2tSKXsKICAgICAgICBmb3IoaW50IGkgPSBsOyBpIDw9IHI7IGkrKykKICAgICAgICAgIGFucyArPSBhW2ldICsgYmxbYmxvY2tMXTsKICAgICAgICBjb3V0IDw8IGFucyA8PCAnXG4nOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBmb3IoaW50IGkgPSBibG9ja0wgKyAxOyBpIDw9IGJsb2NrUiAtIDE7IGkrKykKICAgICAgICBhbnMgKz0gc1tpXSArIGJsW2ldICogQkxPQ0tfU0laRTsKICAgICAgZm9yKGludCBpID0gbCwgZW5kUCA9IChibG9ja0wgKyAxKSAqIEJMT0NLX1NJWkUgLSAxOyBpIDw9IGVuZFA7IGkrKykKICAgICAgICBhbnMgKz0gYVtpXSArIGJsW2Jsb2NrTF07CiAgICAgIGZvcihpbnQgaSA9IGJsb2NrUiAqIEJMT0NLX1NJWkU7IGkgPD0gcjsgaSsrKQogICAgICAgIGFucyArPSBhW2ldICsgYmxbYmxvY2tSXTsKCiAgICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7CiAgICB9CiAgfQoKICByZXR1cm4gMDsKfQ==