分块入门 全WA 要裂开了
#include<bits/stdc++.h>
using namespace std;
const int N = 50005;
int fir[N], las[N];
long long a[N], add[N];
inline int read()
{
int x = 0, f = 1; char ch = getchar();
while (ch < '0' or ch > '9') f *= ch == '-' ? -1 : 1, ch = getchar();
while (ch >= '0' and ch <= '9') x = x * 10 + ch - '0', ch = getchar();
return x * f;
}
int main()
{
int n = read();
int cnt = ((int)sqrt(n)*(int)sqrt(n)==n) ? (int)sqrt(n) : ((int)sqrt(n)+1);
int k = (int)sqrt(n);
for (int i = 1;i <= n;i++) a[i] = (long long)read(), add[i] = 0;
fir[0] = 1 - k; las[0] = 0;
for (int i = 1;i <= cnt;i++) fir[i] = fir[i - 1] + k, las[i] = las[i - 1] + k;
las[cnt] = n;
while (n--)
{
int opt = read(), l = read(), r = read(), c = read();
if (opt)
{
int pos = (r - 1) / k + 1;
printf("%lld\n", a[r] + add[pos]);
}
else
{
int firpos = (l - 1) / k + 1, laspos = (r - 1) / k + 1;
for (int i = l;i <= las[firpos];i++) a[i] += (long long)c;
if (firpos != laspos) for (int i = fir[laspos];i <= r;i++) a[i] += (long long)c;
for (int i = firpos + 1;i < laspos;i++) add[i] += (long long)c;
}
}
return 0;
}