样例都没过
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10;
int n, m;
int g[N], add[N], sum[N], num, belong[N];
int main()
{
scanf("%d%d", &n, &m);
num = sqrt(n);
for (int i = 1; i <= n; i ++ ) scanf("%d", &g[i]), belong[i] = i / num, sum[belong[i]] += g[i];
int op, l, r, v;
while (m -- )
{
scanf("%d", &op);
if (op == 1)
{
scanf("%d%d%d", &l, &r, &v);
if (belong[l] == belong[r]) for (int i = l; i <= r; i ++ ) g[i] += v, sum[belong[i]] += v;
else
{
int i = l, j = r;
while (belong[i] == belong[l]) g[i] += v, sum[belong[i]] += v, i ++ ;
while (belong[j] == belong[r]) g[j] += v, sum[belong[j]] += v, j -- ;
for (int k = belong[i]; k <= belong[j]; k ++ ) add[k] += v, sum[k] += v * num;
}
}
else if (op == 2 || op == 3)
{
scanf("%d", &v);
if (op == 3) v = -v;
g[1] += v;
sum[1] += v;
}
else if (op == 4)
{
scanf("%d%d", &l, &r);
LL sum1 = 0;
if (belong[l] == belong[r])
{
for (int i = l; i <= r; i ++ ) sum1 += g[i] + add[belong[i]];
printf("%lld\n", sum1);
}
else
{
int i = l, j = r;
while (belong[l] == belong[i]) sum1 += g[i] + add[belong[i]], i ++ ;
while (belong[j] == belong[r]) sum1 += g[j] + add[belong[j]], j -- ;
for (int k = belong[i]; k <= belong[j]; k ++ ) sum1 += sum[k];
if (l == 1) sum1 -= add[1];
printf("%lld\n", sum1);
}
}
else if (op == 5) printf("%d\n", g[1] + add[1]);
}
return 0;
}