#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 5e4 + 10;
int n, a[maxn];
int pos[maxn], len, tag[maxn];
void add(int l, int r, int c)
{
for (int i = l; i <= min(pos[l] * len, r); i++)
a[i] += c;
if (pos[l] != pos[r])
for (int i = r; i >= max((pos[r] - 1) * len + 1, l); i--)
a[i] += c;
for (int i = pos[l] + 1; i <= pos[r] - 1; i++)
tag[i] += c;
}
void solve()
{
scanf("%d", &n);
len = sqrt(n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]), pos[i] = (i - 1) / len + 1;
for (int i = 1; i <= n; i++)
{
int opt, l, r, c;
scanf("%d%d%d%d", &opt, &l, &r, &c);
if (opt == 0)
add(l, r, c);
else
printf("%d\n", a[r] + tag[pos[r]]);
}
}
int main()
{
solve();
return 0;
}
原文:https://www.cnblogs.com/danzh/p/11359856.html