Pagini recente » Cod sursa (job #1893667) | Cod sursa (job #115696) | Cod sursa (job #30669) | Cod sursa (job #101449) | Cod sursa (job #1436358)
#include <cstdio>
int N, M;
int tree[15100];
inline int lastDigit(int x) { // least significant bit with value 1
return x & -x;
}
void add(int day, int val) {
while (day <= N) {
tree[day] += val;
day += lastDigit(day);
}
}
int sum(int start, int end) {
int s = 0;
--start;
while (start != end) { // cat timp nu am ajuns la LCA
if (start < end) { // adunam ce e pe ramura lui end
s += tree[end];
end -= lastDigit(end);
} else { // si scadem ce e pe ramura lui start
s -= tree[start];
start -= lastDigit(start);
}
}
return s;
}
int main () {
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
int val, cmd, arg1, arg2;
scanf("%d %d", &N, &M);
for (int i=1; i<=N; ++i) {
scanf("%d", &val);
add(i, val);
}
for (;M;--M) {
scanf("%d %d %d", &cmd, &arg1, &arg2);
if (!cmd)
add(arg1, -arg2);
else
printf("%d\n", sum(arg1, arg2));
}
return 0;
}