Pagini recente » Cod sursa (job #2555171) | Cod sursa (job #2106094) | Cod sursa (job #597505) | Cod sursa (job #1319089) | Cod sursa (job #2062485)
#include <cstdio>
using namespace std;
int arbint[60005];
void update(int nod) {
if(nod > 0) {
arbint[nod] = arbint[2 * nod] + arbint[2 * nod + 1];
update(nod / 2);
}
}
int querry(int st, int dr) {
int ans = 0;
if(st == dr) {
ans += arbint[st];
} else if(st < dr) {
if(st % 2 == 1) {
ans += arbint[st];
++ st;
}
if(dr % 2 == 0) {
ans += arbint[dr];
-- dr;
}
ans += querry(st / 2, dr / 2);
}
return ans;
}
int main() {
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
int n, m, ni = 1;
scanf("%d%d", &n, &m);
while(ni < n) {
ni *= 2;
}
-- ni;
for(int i = 1; i <= n; ++ i) {
scanf("%d", &arbint[ni + i]);
update((ni + i) / 2);
}
for(int i = 1; i <= m; ++ i) {
int t, a, b;
scanf("%d%d%d", &t, &a, &b);
if(t == 0) {
arbint[ni + a] -= b;
update((ni + a) / 2);
} else {
printf("%d\n", querry(ni + a, ni + b));
}
}
return 0;
}