#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 7, S = sqrt(N + 7);
int n, m, loc[N], bl, s, bg[S], ed[S], l, r, opt;
long long sum[S], a[N], add[S], k;
void modify(int l, int r, int k) {
if (loc[l] != loc[r]) {
for (int i = l; i <= ed[loc[l]]; i++) {
a[i] += k;
sum[loc[l]] += k;
}
// add[loc[l]] += k;
for (int i = bg[loc[r]]; i <= r; i++) {
a[i] += k;
sum[loc[r]] += k;
}
// add[loc[r]] += k;
for (int i = loc[l] + 1; i < loc[r]; i++) {
sum[i] += k * (ed[i] - bg[i] + 1);
add[i] += k;
}
} else {
// add[loc[l]] += k;
for (int i = l; i <= r; i++) {
a[i] += k;
sum[loc[l]] += k;
}
}
return;
}
long long query(int l, int r) {
long long ret = 0;
if (loc[l] != loc[r]) {
for (int i = l; i <= ed[loc[l]]; i++) ret += a[i] + add[loc[l]];
for (int i = bg[loc[r]]; i <= r; i++) ret += a[i] + add[loc[r]];
for (int i = loc[l] + 1; i < loc[r]; i++) ret += sum[i];
} else {
for (int i = l; i <= r; i++) ret += a[i] + add[loc[l]];
}
return ret;
}
int main() {
cin >> n >> m;
bl = sqrt(n);
s = ceil(1.00 * n / bl);
for (int i = 1; i <= n; i++) {
cin >> a[N];
loc[i] = ceil(1.00 * i / bl);
}
for (int i = 1; i <= s; i++) {
bg[i] = (i - 1) * bl + 1;
ed[i] = i * bl;
}
ed[s] = n;
for (int i = 1; i <= s; i++) {
for (int j = bg[i]; j <= ed[i]; j++) {
sum[i] += a[j];
}
}
while (m--) {
cin >> opt;
if (opt == 1) {
cin >> l >> r >> k;
modify(l, r, k);
} else if (opt == 2) {
cin >> k;
modify(1, 1, k);
} else if (opt == 3) {
cin >> k;
modify(1, 1, -k);
} else if (opt == 4) {
cin >> l >> r;
cout << query(l, r) << '\n';
} else if (opt == 5) {
cout << query(1, 1) << '\n';
}
// for (int i = 1; i <= n; i++) cout << query(i, i) << ' ';
// puts("");
}
return 0;
}
不知道为什么,评测姬全都说 read 0。