RT, 样例过不了
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
int N, F, B;
int a[MAXN], sum[MAXN], add[MAXN];
int get(int x) {
return (x + B - 1) / B;
}
void chg(int l, int r, int x) {
int idl = get(l), idr = get(r);
if(idl == idr) {
for(int i = l ; i <= r ; i ++)
a[i] += x;
sum[idl] += (r - l + 1) * x;
} else {
for(int i = idl + 1 ; i <= idr - 1 ; i ++)
add[i] += x;
for(int i = l ; i <= idl * B ; i ++)
a[i] += x;
sum[idl] += (idl * B - l + 1) * x;
for(int i = (idr - 1) * B + 1 ; i <= r ; i ++)
a[i] += x;
sum[idr] += (r - (idr - 1) * B) * x;
}
}
int ask(int l, int r) {
int idl = get(l), idr = get(r);
int ans = 0;
if(idl == idr) {
for(int i = l ; i <= r ; i ++)
ans += a[i] + add[idl];
} else {
for(int i = idl + 1 ; i <= idr - 1 ; i ++)
ans += sum[i] + add[i] * B;
for(int i = l ; i <= idl * B ; i ++)
ans += a[i] + add[idl];
for(int i = (idr - 1) * B + 1 ; i <= r ; i ++)
ans += a[i] + add[idr];
}
return ans;
}
int main() {
cin >> N >> F;
N --;
B = sqrt(N);
for(int i = 0 ; i <= N ; i ++) {
cin >> a[i];
sum[get(i)] += a[i];
}
for(int i = 1 ; i <= F ; i ++) {
int op, l, r, x;
cin >> op;
if(op == 1) {
cin >> l >> r >> x;
l --, r --;
if(l == 0) {
a[0] += x;
l = 1;
}
chg(l, r, x);
} else if(op == 2) {
cin >> x;
a[0] += x;
} else if(op == 3) {
cin >> x;
a[0] -= x;
} else if(op == 4) {
cin >> l >> r;
int ans = 0;
if(l == 0) {
ans += a[0];
l = 1;
}
ans += ask(l, r);
cout << ans << endl;
} else if(op == 5) {
cout << a[0] << endl;
}
}
return 0;
}