#include "bits/stdc++.h" using namespace std; #define int long long vector<int> tr, lz, a; #define ls (now<<1) #define rs (now<<1|1) #define mid (l+r>>1) void pushup(int now) { tr[now] = tr[ls] + tr[rs]; } void pushdown(int now, int l, int r) { tr[ls] += lz[now] * (mid - l + 1), tr[rs] += lz[now] * (r - mid); lz[ls] += lz[now], lz[rs] += lz[now]; lz[now] = 0; } void build(int now, int l, int r) {//建树 if (l == r) { tr[now] = a[l]; return; } build(ls, l, mid), build(rs, mid + 1, r); pushup(now); } void modify(int now, int l, int r, int ml, int mr, int k) {//修改 if (l == ml && r == mr) { tr[now] += (r - l + 1) * k, lz[now] += k; return; } pushdown(now, l, r); if (mr <= mid) modify(ls, l, mid, ml, mr, k); else if (ml > mid) modify(rs, mid + 1, r, ml, mr, k); else modify(ls, l, mid, ml, mid, k), modify(rs, mid + 1, r, mid + 1, mr, k); pushup(now); } int query(int now, int l, int r, int ml, int mr) {//查询 if (l == ml && r == mr) return tr[now]; pushdown(now, l, r); if (mr <= mid) return query(ls, l, mid, ml, mr); else if (ml > mid) return query(rs, mid + 1, r, ml, mr); else return query(ls, l, mid, ml, mid) + query(rs, mid + 1, r, mid + 1, mr); } void slu() { int n;//原本数组长度 int m;//修改+查询次数 cin >> n >> m; a.resize(n + 1); tr.resize((n << 2) + 1); lz.resize((n << 2) + 1); for (int i = 1; i <= n; i++)cin >> a[i]; build(1, 1, n);//建树-->tr为树状数组 for (int i = 0; i < m; i++) { int ask; cin >> ask; if (ask == 1) {//修改 int loc, k; cin >> loc >> k; modify(1, 1, n, loc, loc, k); } else {//输出区间和 int l, r; cin >> l >> r; cout << query(1, 1, n, l, r) << endl; } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int T; // cin >> T; T = 1; while (T--)slu(); }