// // Created by darian on 18.06.24. // #include using namespace std; using ll = long long; vector construct(vector &input) { int n = input.size(); vector output(2 * n); for (int i{}; i < n; i++) { output[i + n] = input[i]; } for (int i = n - 1; i >= 1; i--) { output[i] = output[2*i] + output[2*i+1]; } return output; } ll query(int k, vector &tree, int n) { k += n; ll s = 0; int a = n; while (a <= k) { if (a % 2 == 1) { s += tree[a]; a++; } if (k % 2 == 0) { s += tree[k]; k--; } a /= 2; k /= 2; } return s; } void update_range(int a, int b, ll k, vector &tree, int n) { if (b != n - 1) { b += n; tree[b + 1] -= k; b++; b /= 2; for (; b >= 1; b /= 2) { tree[b] = tree[2 * b] + tree[2 * b + 1]; } } a += n; tree[a] += k; a /= 2; for (; a >= 1; a /= 2) { tree[a] = tree[2*a] + tree[2*a + 1]; } } int main() { int n, q; cin >> n >> q; vector input(n); vector difference; for (int i{}; i < n; i++) { cin >> input[i]; if (difference.size()) difference.push_back(input[i] - input[i - 1]); else difference.push_back(input[0]); } auto seg = construct(difference); for (int i{}; i < q; i++) { int t; cin >> t; if (t == 1) { int a, b; ll u; cin >> a >> b >> u; a--; b--; update_range(a, b, u, seg, n); } else { int k; cin >> k; k--; cout << query(k, seg, n) << endl; } } }