Pagini recente » Cod sursa (job #2249102) | Cod sursa (job #520279) | Cod sursa (job #1014341) | Cod sursa (job #454824) | Cod sursa (job #903027)
Cod sursa(job #903027)
#include <cstdio>
#include <cassert>
#define MAX_N 15001
int n, q;
int v[MAX_N];
int aib[MAX_N];
void read() {
assert(scanf("%d%d", &n, &q) == 2);
for (int i = 1; i <= n; ++i)
assert(scanf("%d", &v[i]) == 1);
}
inline int put2(int x) {
return (x ^ (x - 1)) & x;
}
void init() {
for (int i = 1; i <= n; ++i) {
aib[i] += v[i];
if (i + put2(i) <= n)
aib[i + put2(i)] += aib[i];
}
}
inline void update(int pos, int val) {
for (int i = pos; i <= n; i += put2(i))
aib[i] -= val;
}
inline int query(int pos) {
int sum = 0;
for (int i = pos; i > 0; i -= put2(i))
sum += aib[i];
return sum;
}
void solve() {
while (q) {
--q;
int type, a, b;
assert(scanf("%d%d%d", &type, &a, &b) == 3);
if (type == 0)
update(a, b);
else
printf("%d\n", query(b) - query(a - 1));
}
}
int main() {
assert(freopen("datorii.in", "r", stdin));
assert(freopen("datorii.out", "w", stdout));
read();
init();
solve();
}