Pagini recente » Cod sursa (job #2727946) | Cod sursa (job #1957232) | Cod sursa (job #1786934) | Cod sursa (job #543508) | Cod sursa (job #2254751)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define mp make_pair
#define CHECK(x) if(!(x)) return false;
#define CHECKRET(x, y) if(!(x)) return (y);
#define SKIP(x) if((x)) continue;
typedef pair<int, int> pii;
#ifdef INFOARENA
#define ProblemName "datorii"
#endif
#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif
const int MAXN = 15010;
int arbInt[4 * MAXN], arbSz;
inline int parent(int x) {
return (x - 1) >> 1;
}
inline int leftSon(int x) {
return x * 2 + 1;
}
inline int rightSon(int x) {
return x * 2 + 2;
}
void arbUpdate(int pos, int x) {
for (pos += arbSz - 1; pos >= 0; arbInt[pos] += x, pos = parent(pos));
}
int query(int l, int r) {
int ans = 0;
for (l += arbSz - 1, r += arbSz - 1; l <= r; l = parent(l + 1), r = parent(r - 1)) {
if (l % 2 == 0) ans += arbInt[l];
if (r % 2 == 1) ans += arbInt[r];
}
return ans;
}
int main() {
assert(freopen(InFile, "r", stdin));
assert(freopen(OuFile, "w", stdout));
int N, Q;
scanf("%d%d", &N, &Q);
for (arbSz = 1; arbSz < N; arbSz *= 2);
for (int i = 0; i < N; ++i) {
int x;
scanf("%d", &x);
arbUpdate(i, x);
}
while (Q--) {
int tip, a, b;
scanf("%d%d%d", &tip, &a, &b);
if (tip == 0)
arbUpdate(a - 1, -b);
else printf("%d\n", query(a - 1, b - 1));
}
return 0;
}